我有一个ListView,它绑定到一个CollectionViewSource(其源代码是一个ObservableCollection。myList
,如下例所示。)
<CollectionViewSource x:Key="cvs" Source="{Binding myList}" IsLiveGroupingRequested=true />
<ListView Name="itemsList"
SelectionMode="Extended"
Margin="0,0,5,0"
ItemsSource="{Binding Source={StaticResource cvs}}"
SelectionChanged="itemsList_SelectionChanged"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.CanContentScroll="False"
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
我在列表中选择了一个项目。
我遇到的问题是当我清除ItemsSource
集合时。
如果我myList.Clear()
,则itemsList.Items
集合按预期为空,但itemsList.SelectedItems
仍包含所选元素。我使用它的IsSelected
属性取消选择该项目,但这不起作用。
即使在我itemsList.SelectedItems.Clear()/RemoveAt(0)/UnselectAll()
之后,它仍然有一个选定的项目。
非常感谢任何帮助。 感谢
答案 0 :(得分:0)
当.Source
的CollectionViewSource
集合在清除后无法发出CollectionChanged
事件时会发生这种情况。例如,当源是简单的ArrayList
(不通知更改)时,行为将如您所述。
如果没有发出相应的事件,ListView
不知道它应该更新其内部项目缓存和选定的项目列表。
(另一方面,.Items
属性似乎每次调用时都会检查源,因此如果源已经过.Count
,它将报告0
myList.Clear()
清除。)
为了将CollectionViewSource
更改传播到ListView
和myList
,请确保INotifyCollectionChanged
实际上是实现CollectionChanged
并正确发出{ {1}}每当它被清除。