2013-07-01 52 views
0

我有一个组合框,其中SelectedItem绑定到业务对象中的一个属性。通常它工作得很好。但是,对象的属性设置器中有逻辑比偶尔“取消”它认为无效的新值。这是以无声的方式完成的,即不会抛出异常,只是属性值不会改变。在这种情况下,我希望组合框的SelectedItem恢复到之前的选择,因为从技术上讲,新的选择永远不会传播到基础属性。目前,组合框只是停留在新的选择上,这是误导性的,因为这不是基础属性的真实价值。如何处理SelectedItem被对象“取消”

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

+0

你如何绑定ComboBox的SelectedItem属性? –

+0

SelectedItem =“{Binding Path = ProjectionType}”....其中ProjectionType是绑定对象的属性的名称。这是一个枚举属性。 – Tekito

+0

业务对象需要取消,然后调用NotifyPropertyChanged,以便旧值传播回UI。 – Paparazzi

回答

0

一些挖后,我遇到了这个:

http://codebetter.com/jameskovacs/2011/04/28/the-case-of-the-confused-combobox-a-wpfmvvm-bedtime-story/

子类组合框,并迫使它来更新目标被选择后,改变了作品的给出的解决方案在我的机器上,但该网站上的评论员认为,即使这不是防弹的。有几个网站提到wpf组合框在这方面很古怪。显然MS做出了可疑的决定,让组合框忽略任何进一步的通知,同时设置绑定属性,这是有道理的,直到你遇到这样的情况。这至少是其他WPF专家的意见,我绝对不是:)

0

需要调用NotifyPropertyChanged

private enum1 e1 = enum1.val1; 

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

我想到了这一点,但它没有在我的机器上工作。在一些网络搜索后,我已经了解到wpf组合框有一些问题,请参阅我的回答帖子以获取链接。显然它的行为在wpf 3.5和4.0之间可能会有所不同! – Tekito