";所有“;WPF中组合框数据筛选器的值

本文关键字:筛选 数据 所有 quot WPF 组合 | 更新日期: 2023-09-27 17:59:57

在构建用户控件的过程中,我用一些数据填充组合框。工作良好。我将Status.ID作为valuePath,将Status.Name作为displayPath。

cmb.ItemsSource = dbEntities.Status

comobox将用作过滤器控件,我需要为"All"插入一些值,该值将用作空过滤器。

首先我尝试了一个有趣的解决方案:

ObjectSet objectSet= dbEntities.Status;
Status stAll = new Status();
stAll.ID = -1;
stAll.Name = "All";
objectSet.AddObject(stAll);
cmb.ItemsSource = objectSet;

由于某些原因,该对象未添加到objectSet中。它也没有抛出任何异常。

然后我尝试手动将其插入到第一个索引,但我得到了错误:"当ItemsSource正在使用时,操作无效。请改用ItemsControl.ItemsSource访问和修改元素。"我的代码看起来像:

cmb.ItemsSource = entities.Status;
cmb.Items.Insert(0,"All");

两者都不起作用。将该行添加到组合框中最简单的方法是什么?这条错误信息让我一头雾水。我不知道如何将ItemsSource用于这样的目的。

edit:我没有足够的rep来回答我自己的问题,所以这是工作代码。再次感谢克雷格。

CompositeCollection comp = new CompositeCollection();
comp.Add(new CollectionContainer {Collection = dbEntities.Status});
Status stAll = new Status();
stAll.ID = -1;
stAll.Name = "All";
comp.add(stAll);
cmb.ItemsSource = comp;
//do whatever filter you want when the selected value is -1

";所有“;WPF中组合框数据筛选器的值

您尝试执行的操作有几个不同的问题。使用ItemsSource时无法操作Items,而是必须遍历设置为ItemsSource的对象。这就是第二部分中错误消息的内容。这是因为当您设置ItemsSource时,Items值未使用,它不会用ItemsSource的值填充。

我对ObjectSet类不够熟悉,不知道为什么第一个案例不起作用。然而,在你从其他地方提取的价值观中添加一项似乎很尴尬,只是为了获得所有的情况。更好的解决方案是使用null值来表示任何内容。不幸的是,在WPF中没有内置的方法来实现这一点。然而,有一个相当简单的解决方案可以使用适配器来完成此操作。我使用了这个解决方案NullItemSelectorAdaptor,即使null不在列表中,它也会启用null作为选择。您所要做的就是将您的组合框包装在NullItemSelectorAdapter中,null将作为值添加。博客文章非常清楚地解释了一切,所以我不重复了。你可以设置你的过滤器,使null等于没有过滤。

相关文章: