将组合框绑定到 CollectionView 会显示过滤掉的元素。为什么?

发布于 2025-01-07 13:07:33 字数 690 浏览 1 评论 0原文

Wpf 绑定对于那些熟悉它的人来说很有趣,对于新手来说则是噩梦。 如果我将组合框绑定到注释掉的 CollectionView,则控件将显示所有元素,包括那些被过滤器排除的元素。如果我将相同的组合框绑定到 ICollectionView,它只显示过滤后的元素,那就没问题了。

 //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 是好的。 如果我将其绑定到组合框,为什么会得到所有未过滤的元素?

谢谢 菲利波

Wpf binding is funny for those who know it well and it is nightmare for newbie.
If I bind a combobox to the commented out CollectionView the control shows all the elements, including those excluded by the filter. If I bind the same combobox to a ICollectionView it displays only the filtered elements and it is Ok.

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

Here is the code I use to create the CollectionView and ICollectionView

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


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

I checked the CollectionView printing all its elements from C# code and it contains only the filtered elements, so the CollectionView is Ok.
Why do I get all the unfiltered elements if I bind it to a combobox ?

Thanks
Filippo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萝莉病 2025-01-14 13:07:33

MSDN 说关于 CollectionView 类...

您不应在代码中创建此类的对象。创建一个
仅实现 IEnumerable 的集合的集合视图,
创建一个 CollectionViewSource 对象,将您的集合添加到
Source 属性,并从 View 属性获取集合视图。

它还进一步补充...

在 WPF 应用程序中,所有集合都有关联的默认值
集合视图。与其直接使用集合,
绑定引擎始终通过关联的对象来访问集合
看法。要获取默认视图,请使用
CollectionViewSource.GetDefaultView 方法。

MSDN says about CollectionView class...

You should not create objects of this class in your code. To create a
collection view for a collection that only implements IEnumerable,
create a CollectionViewSource object, add your collection to the
Source property, and get the collection view from the View property.

It further adds ...

In WPF applications, all collections have an associated default
collection view. Rather than working with the collection directly, the
binding engine always accesses the collection through the associated
view. To get the default view, use the
CollectionViewSource.GetDefaultView method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文