我有一個ListBox
,我通過動態填充的結合(這在一個DataTemplate
限定,這就是爲什麼所述結合是有點不尋常):列表框「IsSelected」結合僅部分工作
<ListBox SelectionMode="Extended" ItemsSource="{Binding DataContext.ResultList, RelativeSource={RelativeSource AncestorType=Window}}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Object}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
每個ListBoxItem
' s IsSelected
屬性綁定到自定義對象上的IsSelected
屬性。
當我選擇個人ListBoxItem
s時,綁定工作正常 - 自定義對象的IsSelected
屬性在我的ViewModel中更新。但是,如果我通過Ctrl + A命令選擇了所有ListBoxItem
,則只有當前可見的ListBoxItem
(當前在我的滾動視口中的那些)更新其ViewModel綁定。在前端,似乎選擇了所有ListBoxItem
,並且容器ListBox
上的ListBox.SelectedItems.Count
屬性顯示所有項目均已選中。
此外,當我通過Ctrl + A選擇全部ListBoxItem
後,滾動瀏覽ListBox
時,當每個ListBoxItem
滾動到視圖中時,綁定都成功更新。
爲什麼此綁定似乎只是部分工作?當可以同時選擇大量的ListBoxItems
時,是否有更好的方法來處理IsSelected
屬性的綁定?
編輯: 此行爲不會與Ctrl + A鍵命令完全發生 - 選擇使用Shift +點擊所有項目時,我得到了相同的結果。
我不會依賴於UI來做到這一點,你寧願放一個'KeyBinding'並在ViewModel中執行該操作,或者將一些代碼放在後面並將選擇邏輯委託給VM。或者把行爲或對這個關鍵組合起反應的東西。 –
@HighCore - 全部選擇命令不會發生問題;當我使用shift +單擊選擇每個項目時會發生同樣的問題。 –
我遇到了同樣的問題。我放棄了,並使用[SelectedItems]的綁定(http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.selecteditems.aspx)作爲Click處理器的參數按鈕,並將其稱爲一天(您也可以將它用作Command的CommandParameter)。當列表變長時,關閉虛擬化並不值得。 –