WPF CollectionViewSource.View为空

时间:2018-10-31 11:29:41

标签: c# wpf filter collectionviewsource

我从一个触发器获得了CollectionViewSource过滤器,但是我在使其具有第二个过滤器时遇到了问题。 问题来自一个视图(MainWindow.xaml)中的按钮,该按钮必须是PosterView中CollectionViewSource的触发器。

PosterView.xaml

        <CollectionViewSource x:Key="GameListCVS"
                          Source="{Binding PosterViewOC}"
                          CollectionViewType="{x:Type dat:ListCollectionView}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Title" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

PosterView.xaml.cs

        private void SearchString_TextChanged(object sender, TextChangedEventArgs e)
        {
        RefreshList();
        }
        public void RefreshList() 
        {
        GameListCV = ((CollectionViewSource)(FindResource("GameListCVS")));
        GameListCV.Filter += new FilterEventHandler(GenreFilter);
        GameListCV.Filter += new FilterEventHandler(GameSearch);
        if (GameListCV.View != null) //This is getting a null "GameListCV.View" on genre only, works if searchbar updated
            GameListCV.View.Refresh();
        }

MainWindow.xaml.cs

        private void ApplyGenreFilter_OnClick(object sender, RoutedEventArgs e)
    { 
        string genreToFilter = ((Button)sender).Tag.ToString();
        pv.GenreToFilter(genreToFilter);//passes the button tag and runs RefreshList();
        MenuToggleButton.IsChecked = false; //hide hamburger
    }
仅当在搜索栏中输入文本时,

RefreshList()似乎才能获得CVS的视图。 我尝试在PosterView中添加一个按钮来刷新GenreFilter,并且效果很好,所以这意味着问题出在MainWindow上,该按钮随后调用了PosterView.RefreshList();。 -它无法FindResource(“ GameListCVS”)

是否有解决方法(以某种方式明确地对FindResource说-“在PosterView中查找GameListCVS”)-目前,用户必须在TextBox中进行搜索,将其删除,然后他们可以对流派进行精细过滤

1 个答案:

答案 0 :(得分:1)

我认为您必须从ListCollectionView派生,并且在构造函数中,可以在其中设置CustomSort属性