相关疑难解决方法(0)

CollectionViewSource上的触发器过滤器

我正在使用MVVM模式处理WPF桌面应用程序.

我试图ListView根据输入的文本过滤一些项目TextBox.我希望在ListView更改文本时过滤项目.

我想知道在过滤器文本更改时如何触发过滤器.

ListView绑定到CollectionViewSource,它绑定到ObservableCollection我的视图模型.该TextBox用于过滤文字结合在视图模型的字符串,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}" />
Run Code Online (Sandbox Code Playgroud)

Filter="CollectionViewSource_Filter"指向后面代码中的事件处理程序的链接,它只是在ViewModel上调用过滤器方法.

当FilterText的值发生更改时进行过滤 - FilterText属性的setter调用FilterList方法,该方法迭代ObservableCollection我的ViewModel并boolean在每个项目ViewModel上设置FilteredOut属性.

我知道过滤器文本更改时FilteredOut属性会更新,但List不会刷新.该CollectionViewSource当我切换远离它,并再次重新加载用户控件过滤事件仅触发.

OnPropertyChanged("AllProjects")在更新过滤器信息后尝试过调用,但它没有解决我的问题.("AllProjects"是ObservableCollection我绑定到的ViewModel上的属性CollectionViewSource.)

CollectionViewSource当FilterText的值TextBox发生变化时,如何让自己重新过滤?

非常感谢

wpf xaml filter mvvm collectionviewsource

44
推荐指数
4
解决办法
4万
查看次数

MVVM:ViewModel中的CollectionView或xaml中的CollectionViewSource?

我正在使用MVVM模式开发WPF应用程序,我需要在ListView中显示项目列表(带过滤),所选项目的字段显示在主/明细视图中.我在以下两种方式之间徘徊:

  1. 在我的ViewModel中公开CollectionView,并绑定到它.
  2. 在我的ViewModel中公开一个普通的IList,并使用CollectionViewSource在XAML中创建CollectionView.

这是否有可接受的方式?有关最佳方式的任何想法?

collections wpf mvvm

38
推荐指数
1
解决办法
2万
查看次数

标签 统计

mvvm ×2

wpf ×2

collections ×1

collectionviewsource ×1

filter ×1

xaml ×1