如何在數據綁定的WPF ListBox中取消用戶選擇?源屬性設置正確,但列表框選擇不同步。WPF:取消數據綁定列表框中的用戶選擇?
我有一個MVVM應用程序需要取消在WPF列表框中的用戶選擇,如果某些驗證條件失敗。驗證由列表框中的選擇而不是提交按鈕觸發。
ListBox.SelectedItem
屬性綁定到ViewModel.CurrentDocument
屬性。如果驗證失敗,視圖模型屬性的setter將退出而不更改屬性。因此,ListBox.SelectedItem
所綁定的財產不會被更改。
如果發生這種情況,視圖模型屬性設置器會在退出之前引發PropertyChanged事件,我認爲這會足以將ListBox重置爲舊選擇。但這不起作用 - 列表框仍然顯示新的用戶選擇。我需要重寫該選擇並使其與源屬性重新同步。
只是爲了防止不清楚,這裏是一個例子:ListBox有兩個項目,Document1和Document2; Document1被選中。用戶選擇Document2,但Document1無法驗證。 ViewModel.CurrentDocument
屬性仍設置爲Document1,但ListBox顯示已選中Document2。我需要將列表框選擇返回到Document1。
這裏是我的列表框綁定:
<ListBox
ItemsSource="{Binding Path=SearchResults, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=CurrentDocument, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
我曾嘗試使用從視圖模型的回調(作爲事件)的視圖(其中訂閱事件),迫使SelectedItem屬性回舊的選擇。我用事件傳遞舊文檔,它是正確的(舊選擇),但列表框選擇不會改回。
那麼,如何讓列表框選擇恢復與其SelectedItem
屬性綁定的視圖模型屬性同步?謝謝你的幫助。
'SearchResults'集合在創建控件後的任何時候是否更改?我認爲在任何時候或者SelectedItem對象來自不同的集合時,ItemsSource必然會發生更改的集合可能存在問題。 – 2010-04-09 15:26:16
這是http://stackoverflow.com/questions/2608071/wpf-cancel-a-user-selection-in-a-databound-listbox其中有更多的答案,包括鏈接到http://博客.alner.net/archive/2010/04/25/cancelling-selection-change-in-a-bound-wpf-combo-box.aspx – splintor 2011-07-12 16:46:51