【问题标题】:Rebinding to WPF Datagrid's Datacontext重新绑定到 WPF Datagrid 的 Datacontext
【发布时间】: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


【解决方案1】:

我遇到了类似的问题。更改某些样式值后,需要在我的 DataGrid 上重新应用转换器。

对我来说这很有效:

myGrid.Items.Refresh()

它似乎重新应用了所有规则,因此它可能对您有用。

【讨论】:

    【解决方案2】:

    myGrid.Items.Refresh() 也对我有用,只需在之前重新设置上下文

    public void GridExamsRefresh()
    {
      grdExamenes.ItemsSource = (this.objPacienteOfContext).Exams;
      grdExamenes.Items.Refresh();
    }
    

    【讨论】:

      【解决方案3】:

      好像在this question.遇到了一些类似的问题,在cmets中,他甚至说将datacontext设置为null,然后重新赋值是行不通的。

      也许您必须修改该答案中提到的项目集合?

      【讨论】:

        【解决方案4】:

        您是否尝试过设置 ItemsSource 属性?

        【讨论】:

          猜你喜欢
          • 2013-11-16
          • 1970-01-01
          • 2012-12-25
          • 2021-08-29
          • 1970-01-01
          • 2015-01-21
          • 2016-10-28
          • 2012-11-22
          • 2012-11-05
          相关资源
          最近更新 更多