调用调度程序取消MVVM属性更改不起作用

时间:2016-09-30 14:24:58

标签: c# wpf xaml mvvm

我有一个要更新的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解决方案,但我可能错过了一些东西:(

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码,如果MyProp具有正确的值(即旧值),并且如果它没有被其他任何人修改,那么它应该更新。 正如你已经确认你在你的代码版本中修改它一样,因此实例永远不会相同,并且它反映在UI上更新的版本细节,这不是预期的。