我无法相信我对这个相当直接的事感到难过。我最初在WPF datagrid codeplex讨论中发布了这个但没有得到回应。所以我在这里尝试:
我似乎找不到办法做到这一点。我创建了一个datagrid,其datacontext最初用表中的行填充。我已经实现了一个搜索功能,它将根据条件返回一些行。假设我只想显示那些行,如何销毁最初创建的datacontext并添加新过滤的集合?
我天真地开始这样做:
(后期编辑:我似乎无法在此处输入泛型代码 - 支持以下行中的强制转换以将datagrid.Items强制转换为MyType(例如))
IEnumerable rows = datagrid.Items.Cast();
IEnumerable filteredRows = rows.Where(row => row.someCondition == true);
我现在如何让我的datagrid只显示filteredRows?刚做:
datagrid.DataContext = null;
datagrid.DataContext = filteredRows;
不起作用(因为某些原因它甚至闻起来很愚蠢)。
我还需要反过来(一旦我开始工作)。某些按钮应允许用户“清除”搜索结果并将DataContext重新插回“行”(在上面的代码段中)。
我错过了什么?
答案 0 :(得分:3)
我遇到过类似的问题。在更改某些样式值后,需要在我的DataGrid上重新应用转换器。
对我来说这很有效:
myGrid.Items.Refresh()
它似乎重新应用了所有规则,因此它可能适合您。
答案 1 :(得分:1)
myGrid.Items.Refresh()也适合我,只是重新设置上下文
public void GridExamsRefresh()
{
grdExamenes.ItemsSource = (this.objPacienteOfContext).Exams;
grdExamenes.Items.Refresh();
}
答案 2 :(得分:0)
似乎在this question.中遇到了类似的问题。在评论中,他甚至说将datacontext设置为null然后重新分配它不起作用。
也许您必须修改该答案中提到的项目集合?
答案 3 :(得分:0)
您是否尝试过设置ItemsSource属性?