私はMVVMプロパティを更新していますが、セッター内の変更を取り消す場合があります。MVVMプロパティの変更を取り消すためにディスパッチャを呼び出すことができません。
私たちはこれを行うには、ディスパッチャを使用する必要があることを説明するいくつかのSOの記事を読みました:
しかし、それは私の場合には動作しません。 何らかの理由で、XAMLコントロールが更新されます。 properrtyが新しい値に設定された後に、ディスパッチャメソッドを実行すると、デバッガが実行されるのがわかります。それを元に戻すコードを実行しますが、コントロールは古い値に切り替えるのではなく、新しい値に固執します。
次のように私のコードは次のとおりです。
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の解決策のように見えるが、私はおそらく、私はあなたのコードを試してみましたが、MyPropでは、正しい値を持っている場合(つまり、旧:(
Dispatcherメソッドで確実ですか?MyProp = storedValue; は古い値を取得していますか? 他の誰もオブジェクトの同じインスタンスを更新していないようにすることもできます。 – Versatile
@Versatile 実際には、MyPropとstoredValueの両方がデバッグモードで古い値を持ちます。ラインは役に立たないが、それは確かに確かだった。 私はプロパティセッターにブレークポイントを置き、それ以外は何も更新しません。 私は本当にこの1つに困惑しています。 –
実際にあなたは正しいです。 MyPropが、面倒を引き起こしていたINotifyPropertyChangedを実装するオブジェクトによって変更されたため、これは最初は機能しませんでした。 ソートされると、ディスパッチャは期待どおりに動作します。 Thoxは正しい方向へ私を指摘してくれた。 –