문제

도구 상자에서 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");
                }
            }

상황과 관련하여 규칙이 구체적 일 때 매우 유용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top