Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用验证保持ViewModel和View的同步_C#_Wpf_Mvvm_Viewmodel_Dependency Properties - Fatal编程技术网

C# 如何使用验证保持ViewModel和View的同步

C# 如何使用验证保持ViewModel和View的同步,c#,wpf,mvvm,viewmodel,dependency-properties,C#,Wpf,Mvvm,Viewmodel,Dependency Properties,我有一个绑定到我的模型的文本框,我意识到这应该在VM中,但这是目前的方式。我有validateSonexception=true,但当我的属性设置程序验证并抛出异常时,我的模型和视图不同步模型保持旧,视图变为新。我甚至尝试过用try…finally包装,其中finally调用OnPropertyChanged。如何将视图和模型都设置为旧值 public Object MyProperty { get{return _myProperty;} set { T

我有一个绑定到我的模型的文本框,我意识到这应该在VM中,但这是目前的方式。我有validateSonexception=true,但当我的属性设置程序验证并抛出异常时,我的模型和视图不同步模型保持旧,视图变为新。我甚至尝试过用try…finally包装,其中finally调用OnPropertyChanged。如何将视图和模型都设置为旧值

public Object MyProperty
{
    get{return _myProperty;}
    set
    {
        ThrowIfNotValid();
        _myProperty = value;
        OnPropertyChanged("MyProperty");
    }
}

更新资源记录器可能会工作

   <TextBox Text={Binding YourModel.PropertyName, UpdateSourceTrigger=PropertyChanged}" />
我想详细说明这会带来什么样的痛苦,但我最终选择了一种混合的


我正在使用上面的答案,但随后不得不创建一个类似于INotifyPropertyChanged的界面来通知用户,因为上面的答案消除了任何验证错误

您可以发布您的属性代码吗。简单的回答是:只需结合IDataErrorInfo绑定到字符串属性。@blindmeis我添加了一个属性代码的示例。我已经尝试过IDataErrorInfo,但是它只处理在值已经更改后的验证,没有内置的方法来回滚更改,我只能看到一个快速的评论,我认为这就是您在第一句话中所指的,但请注意,通常情况下,将模型直接绑定到视图并不是最佳做法,而是让viewmodel创建视图所需的属性。