1

SelectedDocument プロパティと Documents プロパティを持つビューモデルがあります。

Ui には、ItemsSource が Documents にバインドされ、SelectedValue がビューモデルの SelectedDocument にバインドされたカスタム ListView コントロールがあります。

現在、選択したドキュメントのセッターのビューモデルで、何かを尋ねるダイアログ サービス メッセージを発生させる必要があります。キャンセルの場合は、SelectedDocument の変更を防ぐ必要があります。

それはできますが、ビューモデルのプロパティの値を変更しないと、UI とビューモデルが同期しなくなります。

双方向バインディングがソースを更新しているときにプロパティのセッターが呼び出されるという事実のために、おそらく何かする必要があります。

これはどのように解決できますか?

ありがとう

4

3 に答える 3

3

変更を元に戻す必要がありますが、Setter で直接元に戻すことはできず、ここで説明されているように Dispatcher を使用する必要があります

MVVM で Dispatcher を使用することに関しては、ここ、ここ、またはここ (MEFedMVVM.Services.Contracts 名前空間の下を参照) で見つけることができるように、そのためのインターフェイスの使用に関するさまざま投稿がありますIDispatcher。それらのどれがあなたに適しているかを確認する必要があります。

于 2012-05-10T22:09:46.950 に答える
1

.Net 3.5を使用していると思いますか?これは「既知の問題」であり、.Net 4 で変更されました (必ずしも修正されたわけではありません!)

変更に関するブログ投稿がここにあり、3.5 での問題に対処する方法についてのいくつかの提案も示しています。

https://web.archive.org/web/20150925210516/https://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

于 2012-05-11T03:33:09.557 に答える
0

ダイアログがキャンセルされた場合は、PropertyChange イベント イベントを呼び出す必要があります。このように、UI レイヤーは SelectedDocument をリセットすることで応答します。

于 2012-05-10T21:47:58.817 に答える