为什么我的IDdataErrorInfo验证实现没有被提取?

时间:2017-09-04 09:08:20

标签: c# wpf validation

我写了一个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。我试过删除它,但无济于事。

1 个答案:

答案 0 :(得分:1)

感谢大家在这里寻求帮助。

虽然这可能不是WPF和MVVM之后的最佳方式 - 我通过设置DataContext来修复它,如下所示:

<Window.DataContext>
    <local:PatientValidation></local:PatientValidation>
</Window.DataContext>