2012-02-22 24 views
0

对于那些熟悉它的人来说,Wpf绑定是有趣的,对于新手来说这是一场噩梦。 如果我将ComboBox绑定到注释掉的CollectionView,控件将显示所有元素,包括过滤器排除的元素。如果我将相同的组合框绑定到ICollectionView,它将只显示过滤元素,并且它是正常的。将组合框绑定到CollectionView会显示过滤掉的元素。为什么?

//public CollectionView MyCapitoliList { get; private set; } 
public ICollectionView MyCapitoliList { get; private set; } 

下面是我用它来创建的CollectionView代码和ICollectionView

MyCapitoliList = CollectionViewSource.GetDefaultView(listaCapitoli); 
//MyCapitoliList = new CollectionView(listaCapitoli); 


MyCapitoliList.Filter = new Predicate<object>(isCapitoloMaster); 

我检查的CollectionView打印从C#代码的所有元素,它仅包含过滤元素,所以的CollectionView是好的。 为什么我将所有未过滤元素都绑定到组合框?

感谢 菲利波

+0

您尚未在此处显示所有代码。你能否显示你正在使用的代码 - 并认为应该工作,绑定到列表的集合,并省略任何注释掉的代码。 – ColinE 2012-02-22 08:26:48

回答

1

MSDN说,大约CollectionView类...

你不应该在你的代码中创建该类的对象。要为仅实现IEnumerable的集合创建 集合视图,请创建CollectionViewSource对象,将集合添加到 Source属性,然后从View属性中获取集合视图。

这进一步增加了...

在WPF应用程序,所有集合有关联的默认 集合视图。绑定引擎始终通过关联的 视图访问集合,而不是直接使用集合。要获取默认视图,请使用 CollectionViewSource.GetDefaultView方法。

+0

好吧,但CollectionViews应该用于什么? – Filippo 2012-02-22 10:32:56

相关问题