2017-09-11 15 views
0

私はTreeViewを持っています。これはWPFアプリケーションをナビゲートする主な方法として機能します。PreviewMouseDown SelectedItemChangedイベントの傍受

ユーザーがTreeViewの新しいアイテムを選択すると、退出中のページに情報が保存されていない場合は、移動をキャンセルして現在のデータの作業を続行する/保存します。これは現在、PreviewMouseDownイベントハンドラで発生します。

ここでyes/no/cancelオプションを指定したダイアログをスローすると、実際にはSelectedItemChangedイベントが実際には発生しないように見えますが、別のマウスクリックが発生したためです。その結果、現在のページに留まるという選択肢が拒否されても、それは変わらない。

PreviewMouseDownの中からイベントを再発生させる方法はありますか?SelectedItemChangedイベントがまだ呼び出されていますか?

答えて

1

PreviewItemChangedイベントが呼び出されるようにPreviewMouseDownからイベントを再発生させる方法はありますか?

メソッドを呼び出すのと同じように、手動でイベントハンドラを呼び出す方が簡単です。または、イベントハンドラのコードを、PreviewMouseDownハンドラとSelectedItemChangedハンドラの両方から呼び出すスタンドアロンメソッドに分解してください。

もう1つの方法は、イベントが再び発生するようにSelectedItemまたはIsSelectedプロパティを変更することです。

+0

私が何かを逃していない限り、私は行方不明のイベントから必要な情報に終わるだろうと確信していません。 PreviewMouseDownイベントは、新しいSelectedItemが何であるかを知りません –

+0

MouseButtonEventArgsのOriginalSourceプロパティを使用して、選択するアイテムを特定できます。 – mm8

+0

OriginalSourcce.DataContextでIsSelectedを設定することができます。これは、データコンテキストがラベル内のテキストになるラベルをクリックしない限り、正常に動作します。そこからツリーをトラバースできますか? –

関連する問題