我的驗證在第一個例子中起作用,但是當我從一個Tab項移動到另一個時,驗證消失。如何使INotifyDataErrorInfo錯誤持續到更正爲止?
我會期望這個狀態是持久性的,直到用戶在這種情況下輸入有效的傳遞條件。
也許這是預期的行爲,我錯過了文檔中的某些東西。
在我的應用程序有一個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;
}
}
將具有校驗,看起來很有希望。很高興知道它爲什麼。 – metoyou