我有一個醜陋的競爭條件與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