重新绑定到WPF Datagrid的Datacontext

时间:2009-06-10 01:02:16

标签: wpf data-binding datagrid datacontext

我无法相信我对这个相当直接的事感到难过。我最初在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重新插回“行”(在上面的代码段中)。

我错过了什么?

4 个答案:

答案 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属性?