2012-05-10 3 views
1

私は、SelectedDocumentプロパティとDocumentsプロパティを持つビューモデルを持っています。WPF MVVMはSelectedValueのバインドを禁止して、状況によっては値を変更しません。

Uiには、ItemsSourceをDocumentsにバインドし、SelectedValueをViewModelのSelectedDocumentにバインドしたカスタムListViewコントロールがあります。

現在、選択したドキュメントの設定者の状況によっては、ダイアログサービスメッセージを表示する必要があります。キャンセルする場合は、SelectedDocumentの変更を防ぐ必要があります。

私はそれを行うことができますが、私はviewmodelのプロパティの値を変更しないと、UIとViewModelの同期が取れなくなります。

おそらく、双方向バインディングがソースを更新しているときにプロパティの設定が呼び出されるためです。

どうすれば解決できますか?

おかげ

答えて

0

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

+0

にこれは私が試した最初のものですが、それはのviewmodelを更新結合prcedureに現在あるおそらくので、何でも、私はプロパティのセッター内で行うには、UIで聞いていません。多分それはスタックのオーバーフローにつながる可能性がありますので気にしませんか? –

3

変更を元に戻す必要がありますが、セッターでは直接行うことはできませんが、ディスパッチャをディスク番号hereとして使用する必要があります。 MVVMでDispatcherを使用するように

here

又はhere又はhereを見つけることができるように、そのためIDispatcherインタフェースを使用に関するさまざまな記事がある(MEFedMVVM.Services.Contracts名前空間の下に見えます)。あなたはそれらの作品のどれがあなたに適しているかを見なければなりません。

+0

現在、私はディスパッチャを使用していますが、リソースが非常に少ないマシン上での高速ナビゲーションのような副作用は、両方のディスパッチャアクションが発生する前に実際に選択した項目を2回変更することができるということを意味します。後で "アニメーション"を見る以上のこと。 –

+0

DispatcherソリューションのNathan Allen-Wagnerへの誇り - あなた、Shriek、それを見つけよう! – else

1

私はあなたの使用を想定しています。ネット3.5?それは「既知の問題」であり、.Net 4で変更されています。(変更は必ずしも修正されていないと言います)

Theresはこの変更についてのブログ記事です。また、この問題の対処方法に関するいくつかの提案3.5

http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

+0

4.0を使用していますが、Textプロパティには使用していません。その1つのためにそれは動作します。私はリストボックスのSelectedValue/SelectedItemのために何かが必要です。リストボックスが現在の項目を変更しないようにする必要があります。 –

+0

私は同じ問題を処理するためにコンボボックスで使用する添付プロパティを持っています。基本的には、プロパティをtrueに設定して、それを選択変更イベントにサブスクライブします。選択変更イベントが発生するとSelectedItemのバインディングを取得し、UpdateTargetを呼び出します。あなたが好きならコードを投稿できます – Scott

関連する問題