微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。