Как сделать ошибки INotifyDataErrorInfo постоянными до исправления?

Моя проверка работоспособна в первом случае, но когда я перехожу от одного элемента Tab к другому и обратно, проверка завершается.

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

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

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

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

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;
    }
}

1 ответ

Не уверен насчет вашего дела, но вы можете попробовать,

TextBox с проверкой теряет ErrorTemplate при смене вкладки

Кстати, я не даунотер:)

Другие вопросы по тегам