オブジェクトのフィールドにバインドされた ComboBox の SelectedItem プロパティがあります。ほとんどの場合、問題なく動作する TwoWay バインディングを使用します。読み込まれると、ドロップダウンの選択はフィールドのゲッターから設定され、選択を手動で変更するとフィールドのセッターが呼び出されます。
ただし、確認ダイアログを表示したい場合があります。ユーザーが「いいえ」をクリックした場合、値を同じままにしておきます。これが私のコードです:
public A Afield
{
get { return _afield; }
set
{
SetA(value);
}
}
public void SetA(LocationConfiguration value, bool prompt = true)
{
if (/*selection would cause irreversible changes*/)
{
if (prompt)
{
MessageBoxResult result = Microsoft.Windows.Controls.MessageBox.Show(
"bla bla bla",
"bla",
MessageBoxButton.YesNo,
MessageBoxImage.Warning);
if (result != MessageBoxResult.Yes)
return;
}
PerformIrreversibleChanges()
}
_afield = value;
NotifyPropertyChanged("Afield");
}
コードビハインドのすべてが完全に機能します。ユーザーが受け入れると、変更が行われます。ユーザーが「いいえ」を押すと、_afield は変更されません。このプロパティにバインドされた他のコントロールは、正しい値を表示します。
ただし、ComboBox の表示は _afield の値に戻りません。変更を拒否した場合でも、選択したままになります。何らかの理由で、プロパティが設定されるまでコンボボックスの項目が設定されないようです。その時点で、コードビハインドに保持されている正しい値ではなく、ユーザーが選択したものが表示されます。