";所有“;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
您尝试执行的操作有几个不同的问题。使用ItemsSource
时无法操作Items
,而是必须遍历设置为ItemsSource
的对象。这就是第二部分中错误消息的内容。这是因为当您设置ItemsSource
时,Items
值未使用,它不会用ItemsSource
的值填充。
我对ObjectSet
类不够熟悉,不知道为什么第一个案例不起作用。然而,在你从其他地方提取的价值观中添加一项似乎很尴尬,只是为了获得所有的情况。更好的解决方案是使用null值来表示任何内容。不幸的是,在WPF中没有内置的方法来实现这一点。然而,有一个相当简单的解决方案可以使用适配器来完成此操作。我使用了这个解决方案NullItemSelectorAdaptor,即使null不在列表中,它也会启用null作为选择。您所要做的就是将您的组合框包装在NullItemSelectorAdapter
中,null将作为值添加。博客文章非常清楚地解释了一切,所以我不重复了。你可以设置你的过滤器,使null等于没有过滤。