我写了一个IDataErrorInfo
类,它提供了一些输入验证。我遇到的问题是它根本没有被检测到,没有显示验证。 几个月前它曾经工作过。我没有更改任何与此验证类相关的代码。
我尝试在Release / Debug,x86 / x64,重建/清理,删除影子缓存之间切换。不幸的是,没有任何帮助。
这就是我在xaml中引用验证类的方法:
xmlns:local="clr-namespace:Pharmatech"
xaml中的验证:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path= (Validation.Errors).CurrentItem.ErrorContent}"></Setter>
</Trigger>
</Style.Triggers>
</Style>
在文本框中调用它:
Text="{Binding Id, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
我的验证类肯定在命名空间'Pharmatech'下:
namespace Pharmatech
{
public class PatientValidation : INotifyPropertyChanged, IDataErrorInfo
{
private string _id;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string p)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(p));
}
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string this[string PropertyName]
{
get
{
string result = null;
switch (PropertyName)
{
case nameof(Id):
if (string.IsNullOrEmpty(Id))
result = "ID number is required.";
else if (InputValidation.validateIDNumber(Id) != true)
result = "Invalid ID number.";
break;
}
return result;
}
}
任何帮助都会非常感激 - 我有一种感觉我错过了一些明显的东西......或者,VS正在弄乱我。
我想值得一提的是我最近添加了UI样式库Metro或MahApps。我试过删除它,但无济于事。
答案 0 :(得分:1)
感谢大家在这里寻求帮助。
虽然这可能不是WPF和MVVM之后的最佳方式 - 我通过设置DataContext来修复它,如下所示:
<Window.DataContext>
<local:PatientValidation></local:PatientValidation>
</Window.DataContext>