我有两个项目.一个是工作,另一个不是,但他们之间的差异并不是我认为"应该"具有任何重要性.第一个项目是破坏的项目,它是我想要解决的项目.第二个项目是我在第一个项目根本无法工作时创建的一个小样本项目.当然样本效果很好.
这是第一个项目的视图.我删除了一堆"MainWindowTabControlStyle",因为它只是破坏的组合框.我有理由确定问题不在风格中,因为它是来自正在运行的项目的复制和粘贴.
以下是设置为MainWindow的DataContext的视图模型.ViewModelBase类与Josh Smith在本月的MSDN文章中写的完全相同.
public sealed class MainWindowViewModel : ViewModelBase { public MainWindowViewModel() { } private ObservableCollectionsubscriptions; public ObservableCollection Subscriptions { get { if (subscriptions == null) { subscriptions = new ObservableCollection (); subscriptions.Add(new Subscription() { DisplayName = "ABC" }); subscriptions.Add(new Subscription() { DisplayName = "XYZ" }); subscriptions.Add(new Subscription() { DisplayName = "PDQ" }); } return subscriptions; } set { subscriptions = value; } } private Subscription selectedSubscription; public Subscription SelectedSubscription { get { return selectedSubscription; } set { selectedSubscription = value; } } }
当我从调试器运行项目时,首先认为调用的是Subscriptions集合的getter.然后在SelectedSubscription上调用setter(它为null).之后,我可以更改组合框中的选定项目,直到我脸部呈蓝色,并且SelectedSubscription属性的setter不会再次更改.重要的是要注意组合框确实包含正确的值.
在第二个项目中,代码是相同的,但第一个被调用的是SelectedSubscription属性的setter(它为null),然后调用Subscriptions集合的getter,最后第二次调用SelectedSubscription的setter并且它具有与Subscriptions集合中的第一个项匹配的值.
如果你有任何想法,这个小宝石花了我大约5个小时我愿意尝试.
谢谢