我有一个组合框,其中 SelectedItem 绑定到业务对象中的属性。通常它工作得很好。但是,对象的属性设置器中存在逻辑,它偶尔会“取消”它认为无效的新值。这是以静默方式完成的,即没有抛出异常,只是属性值没有改变。在这种情况下,我希望组合框的 SelectedItem 恢复到以前的选择,因为从技术上讲,新选择从未传播到基础属性。目前,组合框只是停留在新选择上,这是一种误导,因为这不是基础属性的真实值。
如何确保组合框始终显示属性的真实值?
我有一个组合框,其中 SelectedItem 绑定到业务对象中的属性。通常它工作得很好。但是,对象的属性设置器中存在逻辑,它偶尔会“取消”它认为无效的新值。这是以静默方式完成的,即没有抛出异常,只是属性值没有改变。在这种情况下,我希望组合框的 SelectedItem 恢复到以前的选择,因为从技术上讲,新选择从未传播到基础属性。目前,组合框只是停留在新选择上,这是一种误导,因为这不是基础属性的真实值。
如何确保组合框始终显示属性的真实值?
经过一番挖掘,我遇到了这个:
在我的机器上对组合框进行子类化并强制它在选择更改时更新目标的解决方案适用于我的机器,但该站点上的评论员建议即使这也不是防弹的。几个网站提到 wpf 组合框在这方面很古怪。显然 MS 做出了一个可疑的决定,让组合框在设置绑定属性时忽略任何进一步的通知,这在您遇到这样的情况之前是有意义的。这至少是其他 WPF 专家的意见,我绝对不是 :)
需要调用 NotifyPropertyChanged
private enum1 e1 = enum1.val1;
public enum1 E1
{
get { return e1 }
set
{
if (e1 == value) return;
if (OK(value)) e1 = value;
NotifyPropertyChanged(E1);
}
}