很抱歉,較早的冗長帖子。這裏是我簡潔的(!)描述。組合框與集合視圖itemssource不更新對模型的更改的選擇框項目
我將集合視圖綁定爲組合框作爲itemsSource,並將其selectedvalue與我的視圖模型中的屬性綁定。我必須保持IsSynchronizedWithCurrentItem =「False」。
我更改視圖的源列表,然後刷新視圖。已更改(添加,刪除,已編輯)的項目正確顯示在組合的項目列表中。但問題在於選定的項目。當我改變其屬性也是組合的顯示成員路徑時,改變的屬性值不會反射回組合的選擇框。如果您打開組合下拉列表,它將正確顯示在項目列表中,但不會顯示在選擇框中。
現在,如果我將我的XAML中的組合框標籤更改爲Listbox(保留所有屬性),那麼當所選項目的displaymember屬性值更新時,這些更改會反射回列表框的選定項目。
爲什麼會出現這個問題?
僅供參考:
我的視圖模型具有性能EmployeeCollectionView和SelectedEmployeeId這必將爲組合的的ItemsSource和的SelectedValue RESP。該VM實現INotifyPropertyChanged接口。
我的核心員工類(EmployeeCollectionView的源代碼清單)只是一個沒有INotifyPropertyChanged的Model類。
DisplayMemberPath是員工Model類的「Name」屬性。我通過某種方式改變了這一點,並期望組合選擇框更新值。
我嘗試通過將SelectedEmployeeId設置爲0(其中它正確地從itemsSource中選擇虛擬「 - 全選 - 」員工條目)和舊選定值後刷新其SelectedEmployeeId。但沒用。舊的價值將我帶回舊的標籤。項目集合雖然有最新的條目。
當我在視圖的刷新和刷新之前使組合框的IsEditable = True時,我使IsEditable = False,然後事情正常工作!
但是這是一個補丁,是不必要的。
THX
攝影指導Vinit Sankhe
喬希嗨, THX對療法的答案,但那麼爲什麼這項工作的列表框。列表框的選定項目正確顯示更新的名稱(不帶INotify接口)。 據我所知,在MVVM中,核心模型類(我的例子中的員工類)不建議有INotifyPropertyChanged。只有ViewModel實現這個接口。 – 2010-04-30 10:44:35
沒有看到代碼,我很難分辨ListBox的工作原理。但是你對MVVM的理解並不一定是錯誤的,但是MVVM還是比較新的,並沒有真正的硬性規定。事實是,在MVVM中,您不應該直接在用戶界面中公開「模型」類,但每個人都會不時地違反該規則。但是,如果您想要更改綁定成員以反映在用戶界面中,則必須*實施INotifyPropertyChanged。 – Josh 2010-04-30 13:10:10