Wpf 如何处理SelectedItem是否为";“已取消”;按对象

Wpf 如何处理SelectedItem是否为";“已取消”;按对象,wpf,data-binding,combobox,Wpf,Data Binding,Combobox,我有一个组合框,其中SelectedItem绑定到业务对象中的属性。通常情况下,它工作得很好。但是,对象的属性设置程序中存在逻辑,有时会“取消”它认为无效的新值。这是以静默的方式完成的(只要属性值不变,就不会引发异常)。在这种情况下,我希望组合框的SelectedItem恢复到以前的选择,因为从技术上讲,新选择从未传播到基础属性。当前,combobox只是停留在新选择上,这是误导性的,因为这不是基础属性的真实值 如何确保组合框始终显示属性的真实值?需要调用NotifyPropertyChange

我有一个组合框,其中SelectedItem绑定到业务对象中的属性。通常情况下,它工作得很好。但是,对象的属性设置程序中存在逻辑,有时会“取消”它认为无效的新值。这是以静默的方式完成的(只要属性值不变,就不会引发异常)。在这种情况下,我希望组合框的SelectedItem恢复到以前的选择,因为从技术上讲,新选择从未传播到基础属性。当前,combobox只是停留在新选择上,这是误导性的,因为这不是基础属性的真实值


如何确保组合框始终显示属性的真实值?

需要调用NotifyPropertyChanged

private enum1 e1 = enum1.val1;

public enum1 E1
{
    get { return e1 } 
    set 
    {
        if (e1 == value) return;
        if (OK(value)) e1 = value;
        NotifyPropertyChanged(E1);
    }
}

经过一番挖掘,我发现:


给出的子类化combobox并在选择时强制它更新目标的解决方案在我的机器上运行,但该网站上的评论员认为,即使这样也不是防弹的。有几个网站提到wpf组合框在这方面很古怪。显然,MS做出了一个可疑的决定,即在设置绑定属性时让combobox忽略任何进一步的通知,这在您遇到这种情况之前是有意义的。这至少是其他WPF专家的意见,我肯定不是:)

您如何绑定组合框的SelectedItem属性?SelectedItem=“{binding Path=ProjectionType}”。。。。其中ProjectionType是绑定对象的属性的名称。它是一个枚举属性。业务对象需要取消,然后调用NotifyPropertyChanged,以便将旧值传播回UI。您是否尝试将旧值推送到堆栈中并将其弹出到ProjectionType中?当combobox尝试设置基础属性时,如果随后调用OPC?,combobox将忽略任何还原或引发PropChanged事件的尝试。请参阅我的答案,以获取有关此的链接。我想到了这一点,但它在我的机器上不起作用。在进行了一些网络搜索之后,我了解到wpf组合框对此有一些问题,请参阅我的回复文章中的链接。显然,它的行为在WPF3.5和4.0之间甚至可能有所不同!