我有一个组合框的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