我的验证在第一个实例中有效,但是当我从一个Tab项目转到另一个Tab项目并再次返回时,验证就消失了。
我希望这个状态是持久的,直到用户在这种情况下输入有效的传递标准。
也许这是预期的行为,我在文档中遗漏了一些东西。
在我的应用程序中,我有一个 MainWindow.xaml ,一个 MainWindowViewModel.cs 作为其继承自 BaseViewModel.cs 的DataContext实现 INotifyPropertyChanged 和 INotifyDataErrorInfo 。然后,我创建了一个名为 FilePath.cs 的自定义 ValidationAttribute 。
MainWindow.xaml包含一个带有两个Tab项的Tab Control。只有一个文本框我已经实现了我的验证。这是因为它在验证不正确时会通知我。在此示例中,文件路径不存在。
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;
}
}
答案 0 :(得分:0)
不确定你的情况,但你可以尝试一下,
不过,我不是下载者:)