我有一個組合框的SelectedItem屬性綁定到一個對象的字段。它使用TwoWay綁定,在大多數情況下工作正常;當它加載了,下拉的選擇是從外地的吸氣設定,手動更改選擇調用該領域的引領者。WPF組合框 - 在綁定字段的setter改變選擇 - 組合框選擇不更新
但是,有時我想顯示一個確認對話框。如果用戶點擊「否」,我希望該值保持不變。這裏是我的代碼:
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不被修改。綁定到此屬性的其他控件顯示正確的值。
然而,在組合框顯示不恢復到_afield的值。即使他們拒絕了變更,它仍然保留他們所選的內容。出於某種原因,它似乎沒有設置組合框的項目,直到屬性設置完成。此時它會顯示用戶選擇的內容,而不是保留在代碼隱藏中的正確值。
定義了setter,如果用戶取消該屬性,屬性永遠不會被設置。但由於某些原因,即使屬性保持正確的值,組合框仍顯示用戶嘗試選擇的值。 – hypehuman