我有一个丑陋的竞争条件与WPF usercontrol,这是一种扩展组合框: UserControl主要定义两个可绑定的DependencyProperties,一个是选定的项目,另一个是一个列表,从中可以选择所选项目。 两者都是可绑定的,因此可以使用或不使用选定的项目来初始化控件,并且可以通过绑定(在DataContext更改上)更改这两个属性,此外,由于用户交互,选择可能会更改。 UserControl包含一个ComboBox,其ItemsSource和SelectedItem与我的listControl属性和UserControl的SelectedItem同步 - 迄今为止非常好。 现在的问题是,如果两个属性都从外部更改(准同时)时设置一个新的DataContext与两个值设置,它偶尔会发生SelectedItem设置正确,但列表更新导致选择被重置为空覆盖之前设置的值 - >破坏我的DataContext。为了简短起见:我需要找到一种方法来在列表更新期间“锁定”我的SelectedItem - 但只是观察PropertyChanged-Events是不够的,因为我在更新后收到它们,其中要记住的状态是已经失去了。此外,我不能确定,如果选择更改是由用户或(正确地)绑定或(不需要)由其他绑定间接引起的...我想我需要一些BeforePropertyChanged或OnPropertyChanging事件为我的DependencyProperties - 或另一种方式来管理两个属性的同时更新的顺序。同步用户控件中的多个属性的绑定
任何建议表示欢迎:)
注意,我讲一个列表来选择一个项目,但实际上它是一些更复杂的结构,它可以快速分类和过滤,这也是我为什么不是这个原因在这里使用ItemsControl,但我不认为这与问题相关。
您是否设法解决了这个问题?我有一个类似的问题,我正在挖掘.. – 2010-06-14 13:16:48
还没有反应,你可以看到。 我已经做了,确保绑定始终按照正确的顺序(在XAML中)使用,首先是ItemsSource,然后是SelectedItem。但是这看起来不够健壮,特别是如果您重新使用控件来更改DataContext。 – 2010-06-15 08:16:57
另外一个补充:我已经为我的项目源绑定尝试过“IsAsync”。现在我再次将它们全部设置为IsAsync = False,它似乎保证* my *的正确顺序。 不过,我认为了解其他同步技术会很有趣,因为可能会有更复杂的场景,您仍然需要它们。 – 2010-06-16 08:15:43