WPF 如何过滤 CollectionViewSource 的新实例GetDefaultView 除外

问题描述

我正在尝试过滤 ListView,同时保持通过其他控件中的另一个条件进行过滤的能力,这些控件都绑定到相同的源 ObservableCollection。

这对我来说非常好:

XAML

<ListView x:Name="someListView" ItemsSource="{Binding colView,ElementName=MainForm}">

C#

public ListCollectionView colView { get; set; }
public ObservableCollection<Class> someList = new ObservableCollection<Class>();
...
colView = (ListCollectionView)CollectionViewSource.Getdefaultview(someList);
colView.LiveFilteringProperties.Add(nameof(Class.Property));
colView.Filter = item => checkComboBox.SelectedItems.Contains( ((Class)item).Property );
colView.IsLiveFiltering = true;
someListView.ItemsSource = colView;
...
private void checkComboBox_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
    if (colView != null) colView.Refresh();
}

...除非我将源 (ObservableCollection someList) 绑定到另一个控件,它依赖于 (ListCollectionView colView) 中定义的过滤器,因此它在任何地方都被过滤。

我尝试了以下(除了更多),但我仍然不走运(过滤根本不起作用):

public CollectionViewSource _source { get; set; } = new CollectionViewSource();
public ICollectionView aView
{
    get
    {
        return _source.View;
    }
}
...
_source.source = someList;
_source.LiveFilteringProperties.Add(nameof(Class.Property));
_source.Filter += new FilterEventHandler(ShowOnlySelectedTags);
_source.IsLiveFilteringRequested = true;
aView.Filter = item => checkComboBox.SelectedItems.Contains(((Class)item).Property);
someListView.ItemsSource = aView;
...
private void ShowOnlySelectedTags(object sender,FilterEventArgs e)
{
    Class item = e.Item as Class;
    if (item != null)
    {
        if (checkComboBox.SelectedItems.Contains(item.Property))
        {
            e.Accepted = true;
        }
        else
        {
            e.Accepted = false;
        }
    }
}
...
if (aView != null) aView.Refresh();

我错过了什么?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)