我有一个TagTypeController类,它为WPF UserControl的控制器提供集合视图,该控件包含对集合视图的私有引用。
_ttController = new TagTypeController(_isProd);
CollectionView tagTypeList = _ttController.getTagTypes();
在TagTypeController中,创建CollectionView时,我正在设置过滤器委托
if (_tagTypeList == null)
_tagTypeList = new CollectionView(CollectionViewSource.GetDefaultView(_tagTypeTable));
_tagTypeList.Filter = new Predicate<object>(filterTagTypes);
我想在TagTypeController类中找到该集合视图的所有过滤等逻辑。问题是,当文本在UserControl的TextBox中发生变化时,我通过委托给UserControl的控制器来响应该事件。当我要求tagTypeList刷新时,它不会调用filterTagTypes方法。是否不可能将过滤器委托放在另一个类中?
感谢。
编辑:添加请求的代码
//parse the string to get just the portion after the last comma and space
Int32 _lastComma = _tempText.LastIndexOf(",");
_ttController.searchText = _tempText.Substring(_lastComma + 1).Trim();
tagTypeList.Refresh();
答案 0 :(得分:1)
我认为问题可能是您使用过滤器谓词而不是事件。如果你看一下它所说的CollectionView文档:
如果您的视图对象来自 您应用CollectionViewSource对象 通过设置事件来过滤逻辑 Filter事件的处理程序。
因此,不要设置要使用事件处理程序的属性,因此代码看起来像
_tagTypeList.Filter += FilterTagTypesHandler;
其中FilterTagTypesHandler
定义为
private void FilterTagTypesHandler(object sender, FilterEventArgs e){
//do filtering
}
另一种可能性是您正在创建新的CollectionView
,而不是投射GetDefaultView()
的结果。当你这样做时,你可能正在失去与控件的连接。如果您查看CollectionViewSource's documentation推荐的使用方式是
myCollectionView = (CollectionView)
CollectionViewSource.GetDefaultView(rootElem.DataContext);