我有一个要更新的MVVM属性,在某些情况下我想取消setter中的更改。
我已阅读了几篇SO帖子,解释说我们需要使用调度程序来执行此操作:
但是,它在我的情况下不起作用。 出于任何原因,XAML控件仍然会更新。 我很困惑,因为我可以看到调试器在将属性设置为新值后运行调度程序方法。它确实会运行应该将其切换回来的代码,但是控件会粘贴到新值而不是切换回旧值。
我的代码如下:
private DB_VisionParameters _MyProp;
public DB_VisionParameters MyProp
{
get
{
return _MyProp;
}
set
{
if (_MyProp == value)
{
return;
}
if ( isInvalidTest)
{
MyType storedValue = _MyProp;
//switch back to update interface with old value
DB_VisionParameters previousVisionParameter = _MyProp;
if (DispatcherHelper.UIDispatcher != null)
DispatcherHelper.UIDispatcher.BeginInvoke(
(new Action(() =>
{
_MyProp = storedValue;
RaisePropertyChanged("MyProp");
})), DispatcherPriority.ContextIdle);
return;
}
_MyProp = value;
RaisePropertyChanged("MyProp");
}
}
对我来说看起来像SO解决方案,但我可能错过了一些东西:(
答案 0 :(得分:0)
我尝试了你的代码,如果MyProp具有正确的值(即旧值),并且如果它没有被其他任何人修改,那么它应该更新。 正如你已经确认你在你的代码版本中修改它一样,因此实例永远不会相同,并且它反映在UI上更新的版本细节,这不是预期的。