Как сделать ошибки 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 при смене вкладки
Кстати, я не даунотер:)