我有一个WPF用户控件的丑陋竞态条件问题,它是某种扩展ComboBox:
该UserControl主要定义了两个可绑定的DependencyProperties,一个是选定的项目,另一个是列表,可以从中选择选定的项目。两者均可绑定,因此控件可以使用或不使用选定的项目进行初始化,并且两个属性都可以通过绑定(在DataContext更改时)进行更改,进一步,由于用户交互,选择可能会发生更改。
UserControl包含一个ComboBox,其ItemsSource和SelectedItem与我的列表属性和UserControl的SelectedItem同步-到目前为止还好。现在的问题是,如果同时从外部更改这两个属性(几乎同时),当设置具有两个值的新DataContext时,偶尔会发生SelectedItem被正确设置但列表更新导致选择被重置为null,覆盖先前设置的值->破坏我的DataContext。
简而言之:我需要找到一种方法来在列表更新期间“锁定”我的SelectedItem-但仅观察PropertyChanged事件是不够的,因为我在更新后接收到它们,在那里记住状态已经丢失。此外,我无法确定选择更改是由用户引起的还是(正确地)由绑定引起的或者(不希望的)间接由其他绑定引起的......我认为我需要一些BeforePropertyChanged或OnPropertyChanging事件来处理我的DependencyProperties-或者另一种管理同时更新两个属性的顺序的方式。 欢迎任何建议 :)
请注意,我谈论的是选择项目的列表,但实际上它是一些更复杂的结构,允许快速排序和过滤,这也是为什么我在这里不使用ItemsControl的原因,但我不认为这与问题相关。
简而言之:我需要找到一种方法来在列表更新期间“锁定”我的SelectedItem-但仅观察PropertyChanged事件是不够的,因为我在更新后接收到它们,在那里记住状态已经丢失。此外,我无法确定选择更改是由用户引起的还是(正确地)由绑定引起的或者(不希望的)间接由其他绑定引起的......我认为我需要一些BeforePropertyChanged或OnPropertyChanging事件来处理我的DependencyProperties-或者另一种管理同时更新两个属性的顺序的方式。 欢迎任何建议 :)
请注意,我谈论的是选择项目的列表,但实际上它是一些更复杂的结构,允许快速排序和过滤,这也是为什么我在这里不使用ItemsControl的原因,但我不认为这与问题相关。