当其他字段的值发生变化时,如何在字段上显示错误

时间:2015-05-08 16:40:29

标签: c# wpf xaml mvvm combobox

我有一个带有对话框的WPF应用程序,允许用户编辑对象的设置。我在这个对话框中使用MVVM。我的视图此对话框的模型对象实现了IDataErrorInfo接口。

表单上的一个字段是ComboBox,它映射到视图模型对象的属性,即enum。表单上还有其他字段,其验证逻辑取决于绑定到ComboBox的字段的值。

单独地,当输入不同字段的值时,它们将验证并且对话框显示正确的错误状态。也就是说,当您创建新对象并编辑表单以指定与默认值不同的值时,将正确显示每个控件的错误状态。我的问题是,当您编辑现有对象并更改ComboBox中的选定值时,可能在对话框下方显示的字段中指定的值可能无效,但错误状态不是正在展示。

以下是更改ComboBox的选定值时运行的代码:

    private void TypePicker_SelectionChanged( object sender, SelectionChangedEventArgs e ) {
        IsDirty = true;
        MyCommands.SaveChanges.CanExecute( this, OkButton );
        e.Handled = true;
    }

MyCommands是一个班级;命令是该类的静态属性。 IsDirty是属于对话框的bool DependencyProperty

当我更改ComboBox中的选定值时,如何让其他字段验证?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来完成这项工作。它更像是一种蛮力技术,但它有效。

我添加了代码,将依赖字段的TextBox控件的值设置为其当前值。这会引发这些控件的TextChanged事件,这会导致与它们关联的属性重新生效,并显示错误条件。例如,

private void TypePicker_SelectionChanged( object sender, SelectionChangedEventArgs e ) {
    IsDirty = true;
    FirstDependentTextBox.Text = ViewModelObject.Property1;
    SecondDependentTextBox.Text = ViewModelObject.Property2;
    MyCommands.SaveChanges.CanExecute( this, OkButton );
    e.Handled = true;
}

这很有效。我对它不满意,因为似乎应该有一种更优雅的方式来做同样的事情,但它确实有效,而且它是我现在所使用的。