C# IDataErrorInfo未更新

C# IDataErrorInfo未更新,c#,wpf,C#,Wpf,我遇到了IDataErrorInfo接口和当前正在编程的向导的问题 我的程序的目的是请求一些输入(通常使用条形码扫描仪完成),并根据输入启动特定序列。 这是作为意图工作。为确保捕获错误的扫描,如果触发此事件,将使用事件(OnValueParseFailed)检查所有输入。我的当前文本框已聚焦且所有文本均已选中: 接口本身是这样包含的: 这是第一次运行。但是,如果向导完成或中止,并在不关闭应用程序的情况下再次运行,则不会显示错误消息 重置只是将应用程序返回到默认值。 在调试时,我可以看到正确

我遇到了IDataErrorInfo接口和当前正在编程的向导的问题

我的程序的目的是请求一些输入(通常使用条形码扫描仪完成),并根据输入启动特定序列。 这是作为意图工作。为确保捕获错误的扫描,如果触发此事件,将使用事件(OnValueParseFailed)检查所有输入。我的当前文本框已聚焦且所有文本均已选中:

接口本身是这样包含的:

这是第一次运行。但是,如果向导完成或中止,并在不关闭应用程序的情况下再次运行,则不会显示错误消息

重置只是将应用程序返回到默认值。

在调试时,我可以看到正确处理的界面。但不会显示任何错误

在XAML中,绑定是双向设置的


我使用的是MahApps,但由于textbox类基于wpf textbox,我怀疑该元素中的错误是问题所在。任何建议都很好。

多谢各位

多米西的回答帮助了我


实现INotifyDataErrorInfo而不是IDataErrorInfo是一个重大改变,但它解决了这个问题

如何显示向导?它在窗户里面吗?另外,属性是如何定义的(即DependencyProperty或INotifyPropertyChanged)?afaik WPF元素不订阅IDataErrorInfo,但是它们在INotifyDataErrorInfo对象上执行。因此,您应该实现INotifyDataErrorInfo而不是IDataErrorInfo@Domysee
验证数据错误
启用对
IDataErrorInfo
的支持。您是否实现了
INotifyPropertyChanged
    this.MyWizardViewModel.ValueParseFailed += (s, e) =>
    {
        switch (e.Parameter)
        {
            case "ProductionOrder":                            
                this.TextBoxProduction.Focus();
                this.TextBoxProduction.SelectAll();
                break;
    public string this[string name]
    {
        get
        {
            string result = null;

            if ((name == "ProductionOrder") && (!string.IsNullOrEmpty(this.ProductionOrder)))
            {
                if (this.System.FirmwareVersion == 0)
                    result = Lang.Strings.WrongEntry;
            }
    public void ResetApplikation()
    {
        this.System.Clear();  // reset System values

        this.ProductionOrder = string.Empty;
        this.BmsTypeCode = string.Empty;
        this.CellStack1TypeCode = string.Empty;
        this.CellClass1 = string.Empty;
        this.CellStack2TypeCode = string.Empty;
        this.CellClass2 = string.Empty;
        this.IsSystemProgrammed = false;
        this.IsSystemParameterized = false;

        this.MyMachine.Abort();  // reset wizard state
    }