0

ViewModel が閉じないようにする必要があります。また、モデルの編集がキャンセルされないようにする必要があります。ViewModel で OnClosing をオーバーライドしようとしましたが、そのイベントは遅すぎました。モデルの編集がキャンセルされた後に発生しました。(私には奇妙な出来事の順序のように思えます。)

OnViewModelCanceling を使用するという古い質問と回答を見つけましたが、そのメソッドは現在のバージョンではオーバーライド可能として存在しません。

OnViewModelEvent を見つけましたが、別名、ViewModel のイベントに対して呼び出されません。

では、ViewModel で Cancel をオーバーライドして false を返す正しい解決策はありますか、それとも ViewModel で Canceling イベントを登録する必要がありますか?

Cancel のオーバーライドを使用してみましたが、単純な ViewModel で機能します。ただし、現在の ViewModel に ViewModel を含むネストされたコントロールがあり、それらも Cancel から false を返す場合、外側の ViewModel は Cancel でクラックを取得することさえありません。(これは理にかなっています。)ここでの私の問題は、キャンセルを尊重したい場合があり、外側のViewModelはそれを認識していますが、ネストされたViewModelは認識していません。これをさまざまな方法で解決できることはわかっていますが、この新しい問題を解決する前に、モデルの編集のキャンセルを防ぐためのより良い方法があるかどうかを知りたいです。

これは、質問ごとに 1 つの質問の規則に違反する可能性がありますが、非常に密接に関連しています。また、ViewModel を閉じる方法を知る必要がありますが、そのモデルに対して EndEdit (または CancelEdit) を実行しないでください。

Catel 3.9 を使用した WPF アプリケーション

4

1 に答える 1

0

Save() をオーバーライドして false を返すことができます。ユーザーコントロールが閉じないようにすることは、エンドユーザーにとって非常に理解しにくいため、実現が困難です。

base.Save() と base.Cancel() がモデルの編集で開始されるため、false を返す前に base を呼び出さないようにしてください。

于 2014-04-22T20:39:28.517 に答える