Tag: collectionviewsource

WPF多个CollectionView与同一个集合上的不同filter

我正在使用一个ObservableCollection与两个ICollectionView不同的filter。 一个是按某种types过滤邮件,一个是用于计算检查的邮件。 正如你所看到的消息filter和消息计数工作正常,但是当我不检查消息从列表中消失( 计数仍在工作 )。 顺便说一句,很抱歉,我想包括所有相关的东西。 XAML代码: <!– Messages List –> <DockPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Height="500"> <ListBox Name="listBoxZone" ItemsSource="{Binding filteredMessageList}" Background="Transparent" BorderThickness="0"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Name="CheckBoxZone" Content="{Binding text}" Tag="{Binding id}" Unchecked="CheckBoxZone_Unchecked" Foreground="WhiteSmoke" Margin="0,5,0,0" IsChecked="{Binding isChecked}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </DockPanel> <Button Content="Test Add New" Grid.Column="2" Height="25" HorizontalAlignment="Left" Margin="34,2,0,0" Click="button1_Click" /> <Label Content="{Binding checkedMessageList.Count}" Grid.Column="2" Height="25" […]

在CollectionViewSource上触发filter

我正在使用MVVM模式在WPF桌面应用程序上工作。 我想基于在TextBox键入的文本筛选ListView的一些项目。 我希望ListView项目被过滤,因为我改变了文本。 我想知道如何在filter文本更改时触发filter。 ListView绑定到一个CollectionViewSource ,绑定到ViewModel上的ObservableCollection 。 filter文本的TextBox绑定到ViewModel上的一个string,它应该是UpdateSourceTrigger=PropertyChanged 。 <CollectionViewSource x:Key="ProjectsCollection" Source="{Binding Path=AllProjects}" Filter="CollectionViewSource_Filter" /> <TextBox Text="{Binding Path=FilterText, UpdateSourceTrigger=PropertyChanged}" /> <ListView DataContext="{StaticResource ProjectsCollection}" ItemsSource="{Binding}" /> Filter="CollectionViewSource_Filter"链接到后面的代码中的事件处理程序,它只是在ViewModel上调用filter方法。 当FilterText的值发生变化时进行筛选 – FilterText属性的setter调用一个FilterList方法,该方法遍历ViewModel中的ObservableCollection ,并在每个ViewModel项上设置一个boolean FilteredOut属性。 我知道FilteredOut属性在filter文本更改时更新,但List不刷新。 CollectionViewSourcefilter事件只有在重新加载UserControl的时候才会被触发。 我已经尝试更新filter信息后调用OnPropertyChanged("AllProjects") ,但它并没有解决我的问题。 (“AllProjects”是我的ViewModel的CollectionViewSource绑定的ObservableCollection属性。) 当FilterText TextBox的值发生变化时,如何让CollectionViewSource重新进行自我刷新? 非常感谢