【发布时间】:2010-11-01 16:12:53
【问题描述】:
我不敢相信我被这个相当简单的事情难住了。我最初在 WPF datagrid codeplex 讨论中发布了这个,但没有得到回应。所以我在这里尝试:
我似乎找不到办法做到这一点。我创建了一个数据网格,其数据上下文最初填充了表中的行。我已经实现了一个搜索功能,它将根据条件返回一些行。假设我只想显示这些行,如何销毁最初创建的数据上下文并添加新过滤的集合?
我天真地开始这样做:
(后期编辑:我似乎无法在此处输入泛型代码——下一行中的转换应该将 datagrid.Items 转换为 MyType(例如))
IEnumerable rows = datagrid.Items.Cast();
IEnumerable filteredRows = rows.Where(row => row.someCondition == true);
我现在如何让我的数据网格只显示已过滤的行?只是在做:
datagrid.DataContext = null;
datagrid.DataContext = filtersRows;
不起作用(由于某种原因,它甚至闻起来很蠢)。
我也需要做相反的事情(一旦我得到这个工作)。一些按钮点击应该允许用户“清除”搜索结果并将 DataContext 重新插入“行”(在上面的 sn-p 中)。
我错过了什么?
【问题讨论】:
-
分配 dataGrid.DataContext = filteredRows 时会发生什么?我想这应该可行。
-
如果您在代码周围添加 `` 标记,您应该也可以发布通用代码。
-
显然,这样做的方法是将该委托(过滤行)直接分配给 Items 集合的 Filter 属性。一旦我开始工作,我会试试这个。我会报告事情的结果。
标签: wpf data-binding datagrid datacontext