2017-02-08 21 views
-1

Моя проверка работает в первом экземпляре, но когда я перехожу от одного элемента табуляции к другому и обратно, проверка не прошла.Как сделать ошибки INotifyDataErrorInfo постоянными до тех пор, пока не будет исправлено?

Я бы ожидал, что это состояние будет постоянным, пока пользователь не введет правильные критерии прохождения в этом сценарии.

Возможно, это ожидаемое поведение, и я пропустил что-то в документации.

В моем приложении у меня есть MainWindow.xaml, а MainWindowViewModel.cs как его DataContext, который наследуется от BaseViewModel.cs, который реализует INotifyPropertyChanged и INotifyDataErrorInfo. Затем я создал пользовательский ValidationAttribute под названием FilePath.cs.

MainWindow.xaml состоит из элемента управления Tab с двумя элементами табуляции. Только у меня есть текстовые поля, на которые я выполнил мою проверку. Это работает в том смысле, что оно уведомляет меня, когда проверка неверна. В этом примере путь к файлу не существует.

MainWindow.xaml

<TabControl> 
     <TabItem Header="Boxs"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 

       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 

       <Label Grid.Column="0" 
         Grid.Row="0" 
         Content="File Path" /> 
       <TextBox Grid.Column="1" 
         Grid.Row="0" 
         Margin="5,5,5,5" 
         Text="{Binding FilePath, 
             Mode=TwoWay, 
             NotifyOnValidationError=True, 
             ValidatesOnNotifyDataErrors=True, 
             UpdateSourceTrigger=PropertyChanged}" /> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Blank"/> 
    </TabControl> 

MainViewModel.cs

public class MainWindowViewModel : BaseViewModel 
{ 
    private string filePath; 

    [FilePath] 
    public string FilePath 
    { 
     get { return filePath; } 
     set 
     { 
      filePath = value; 
      ValidateProperty(value); 
      NotifyPropertyChanged(FilePath); 
     } 
    } 
} 

FilePath.cs

public sealed class FilePath : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (!Directory.Exists((string)value)) 
     { 
      return new ValidationResult("Requires Valid File Path", 
        new string[] { validationContext.MemberName }); 
     } 

     return ValidationResult.Success; 
    } 
} 

ответ