2011-07-21 8 views
0

私の問題は仲間です。私はオブジェクトのリストにバインドされているListViewを持っています。それから私はそのオブジェクトにブール値のプロパティを持っています。 ListViewにはチェックボックスがあります。このチェックボックスは、リスト内の特定のオブジェクトのboolの値に応じて、チェックされているかチェックされていません。WPF - 実際にチェックを入れるか、チェックを外す前に、チェックされているイベントとチェックされていないイベントが実行されていますか?

私は自分が言ったように、その行のいくつかのアクションを実行してみてはどうでしょうか。しかし問題は、アクションがユーザーによってキャンセルされ、適用とキャンセルの両方でウィンドウが表示されることです。ユーザーがアクションをキャンセルした場合、チェックボックスはチェックされます!

この操作をキャンセルする方法はありますか?

ありがとうございました。

答えて

2

チェックボックスのチェックを外したときに特別な処理をしない限り、チェックボックスがオンのときに発火するのではなく、チェックボックスがオンになっている場合に特別な処理を行うことができます。キャンセルが選択されている場合は、オブジェクトのソースboolをFalseにリセットしてチェックボックスを再度オフにし、チェックされていないイベントを無視します。

特別な処理を行っていない場合は、バインディングのSourceUpdatedイベントを使用して、チェックボックスをオンにすると、boolがboolではなくfalseになり、チェックボックスがオフになります。

あなたがオブジェクトのブール値を更新するためのチェックを起こしたときを検出したい場合:

<CheckBox isChecked="{Binding MyBool, Mode=TwoWay, NotifyOnTargetUpdated=True}" TargetUpdated="MyTargetUpdated"/> 

あなたのチェックボックスは、オブジェクトのブール値を更新するために発生したときに検出したい場合:

<CheckBox isChecked="{Binding MyBool, Mode=TwoWay, NotifyOnSourceUpdated=True}" SourceUpdated="MySourceUpdated"/> 

あなたはすることができますデータの更新時またはCheckBoxが更新されたときにのみ行動するように選択することができます。

+0

このパートの参考資料はありますか? "バインディングのSourceUpdatedイベントを使用することができます" – Rushino

+0

サンプルコードを追加してこれを行う方法を示しました。 –

0

あなたの質問を誤解しているかもしれませんが、ViewModelのプロパティにバインドされたCheckBoxを持つListViewを持っていればいいと思います。 CheckBoxをオンまたはオフにすると、キャンセル可能なアクションを実行するイベントが発生します。アクションがキャンセルされると、チェックボックスの値を元のチェックの前の値に復元しますか?

キャンセルの場合は、コードの背後にあるIsCheckedプロパティではなく、ViewModelのプロパティ値ではありません。

+0

あなたの説明のほとんどは正しいです。この部分は間違っています "チェックボックスがオンまたはオフの場合、キャンセル可能なアクションを実行するイベントがあります。チェックボックスをクリックすると、ユーザーはそのイベントをキャンセルできる必要があるイベントを実行します。なぜ私は2つのボタンを持つダイアログボックスを表示します。 – Rushino

+0

Clickの代わりにPreviewMouseDownを使用できますか?そこに、キャンセルを通知する場所を設定します。 Checked/Uncheckedイベントでは、そのプロパティがtrueの場合に変更を元に戻します。 PreviewMouseDownイベントは、Checked/Uncheckedイベントの前に発生しますが、Clickイベントはその後発生します。 – Josh

+0

PreviewMouseDownを使用すると、彼のダイアログがポップアップする前にチェックがチェックボックスに表示されなかったことを意味します。これはユーザーを混乱させる可能性があります。 –

関連する問題