문제
도구 상자에서 WPF 구성 요소를보고 있지만 2005/2008 년에 존재하는 오류 제공 업체를 찾을 수 없습니다.
제거 되었습니까?
해결책
그만큼 ErrorProvider Winforms 컨트롤입니다. WPF에는 동등한 것이 없습니다. 그러나 Win Forms 프로젝트를 만들면 Visual Studio 2008에서 여전히 찾을 수 있습니다.
이 기사를보고 싶을 수도 있습니다. WPF의 오류 유효성 검사. 유효성 검사를 처리하는 방법에 대한 유용한 제안과 아이디어가 있습니다.
다른 팁
.NET 3.5 IdataerRorinfo에 대한 WPF 지원 : .NET 3.5의 데이터 검증.
먼저 그렇게 오래된 토론을 언급 한 것에 대해 실례하지만, 이것은 정확히 같은 질문을했기 때문에 도움이 될 수 있으며 Simon의 링크는 "무언가로 시작하는 데 도움이되었습니다"
Simon P.Stevens 튜토리얼을 테스트 할 수는 있지만 솔직히 그다지 마음에 들지 않았습니다.
- ResponseTemplate을 사용하면 오류를 표시 할 때 응답이 느려집니다.
- 이것은 규칙이 동일한 클래스에 대해 항상 동일한 경우에만 작동합니다 (제 경우에는 약간의 수량이 있고 때로는 부정적 일 수 있습니다).
- 국제화 된 응용 프로그램 (내 경우)의 경우 외부 라이브러리는 번역이있는 리소스에 액세스 할 수 없으므로 적절한 메시지를 설정할 수 없습니다.
MVVM을 사용하는 것은 모든 상황을 관리하기에 매우 적합하다고 생각합니다.
텍스트 상자를 테두리 브러시와 툴팁으로 설정했습니다. 조건과 관련하여 툴팁과 색상 테두리를 숨길 것입니다.
XAML :
<TextBox x:Name="tbName" Grid.Column="1" Grid.Row="0" Margin="3" LostFocus="tbName_LostFocus" BorderBrush="{Binding BordertbName}"
Text="{Binding MonRepere.Nom}" ToolTipService.ToolTip="{Binding ErrorName}" ToolTipService.IsEnabled="{Binding ToolTipNameEnable}"/>
뒤에있는 코드 (LostFocus = WindowsForm에 사용 된 휴가) :
private void tbName_LostFocus(object sender, RoutedEventArgs e)
{
if(tbName.Text=="")
{
this.mv.ErrorName = Properties.Resources.ErrorEmpty;
}
else
{
mv.ErrorName = "";
}
}
그런 다음 ViewModel :
private string errorName;
public string ErrorName
{
get { return errorName; }
set
{
errorName = value;
if (value == "")
{
ToolTipNameEnable = false;
BordertbName = Brushes.Gray;
}
else
{
ToolTipNameEnable = true;
BordertbName = Brushes.Red;
}
this.NotifyPropertyChanged("ErrorName");
}
}
private Brush bordertbName;
public Brush BordertbName
{
get { return bordertbName; }
set
{
bordertbName = value;
this.NotifyPropertyChanged("BordertbName");
}
}
private bool toolTipNameEnable;
public bool ToolTipNameEnable
{
get { return toolTipNameEnable; }
set
{
toolTipNameEnable = value;
this.NotifyPropertyChanged("ToolTipNameEnable");
}
}
상황과 관련하여 규칙이 구체적 일 때 매우 유용합니다.
제휴하지 않습니다 StackOverflow