У меня есть фильтрация CollectionViewSource от одного триггера, но у меня проблемы с получением второго фильтра.
Проблема исходит от кнопки в одном представлении (MainWindow.xaml), которая должна быть триггером для CollectionViewSource в PosterView.
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 (); - он не может найти ресурс («GameListCVS»)
Есть ли обходной путь для этого (какой-то способ явно сказать FindResource - «Посмотрите в PosterView for GameListCVS») - поскольку в настоящее время пользователь должен искать в TextBox, удалять его, а затем он может отфильтровать жанры в порядке