ユーザーがコンボ ボックスの選択変更を確認し、ユーザーが [いいえ] を選択した場合は変更を処理しないように求める簡単な方法はありますか?
選択を変更するとデータが失われるコンボ ボックスがあります。基本的に、ユーザーがタイプを選択すると、そのタイプの属性を入力できます。タイプが変更された場合、適用されなくなる可能性があるため、すべての属性をクリアします。問題は、選択の下でSelectionChangedイベントを再度発生させることです。
ここにスニペットがあります:
if (e.RemovedItems.Count > 0)
{
result = MessageBox.Show("Do you wish to continue?",
"Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.No)
{
if (e.RemovedItems.Count > 0)
((ComboBox)sender).SelectedItem = e.RemovedItems[0];
else
((ComboBox)sender).SelectedItem = null;
}
}
私には2つの解決策がありますが、どちらも好きではありません。
ユーザーが[いいえ]を選択した後、イベント ハンドラーを削除し
SelectionChanged、選択した項目を変更してから、SelectionChangedイベント ハンドラーを再度登録します。これは、追加および削除できるように、クラス内のイベント ハンドラーの参照を保持する必要があることを意味します。ProcessSelectionChangedクラスの一部としてブール値を作成します。イベント ハンドラの開始時に必ずチェックしてください。選択を元に戻す前に false に設定し、後で true にリセットします。これは機能しますが、フラグを使用して基本的にイベント ハンドラーを無効にするのは好きではありません。
私が言及したものに代わる解決策や改善策を持っている人はいますか?