我从一个触发器获得了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中进行搜索,将其删除,然后他们可以对流派进行精细过滤>
答案 0 :(得分:1)
我认为您必须从ListCollectionView派生,并且在构造函数中,可以在其中设置CustomSort属性