【问题标题】:WPF DataGrid won't update after code behind changeWPF DataGrid 在代码更改后不会更新
【发布时间】:2013-12-17 16:14:06
【问题描述】:

好的,伙计们,我有一个 Datagrid,它使用视图模型中的下拉列表中的数据进行刷新。一切正常。我最近不得不进行涉及 DatagridColumnHeader 单击的更改。我唯一能想到的就是以这种方式处理它,那就是使用代码隐藏:(。

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridColumnHeader}">
                    <EventSetter Event="Click" Handler="columnHeader_Click" />
                </Style>
 </DataGrid.Resources>

并在后面的代码中处理了该事件。现在在后面的代码中我正在对 Datagrid 进行更改

System.Windows.Controls.Primitives.DataGridColumnHeader col = (System.Windows.Controls.Primitives.DataGridColumnHeader)sender;
            ObservableCollection<tbMain> dc = (ObservableCollection<tbMain>)m_DataGrid.DataContext;
ObservableCollection<tbMain> sortedNewId = new ObservableCollection<tbMain>();

m_DataGrid.ItemsSource = sortedNewId;
m_DataGrid.Items.Refresh();

现在所有代码都可以正常工作并刷新我的 DataGrid,但我似乎打破了 viewmodel 和 DataGrid 之间的绑定,因为现在当我从下拉列表中选择某些内容时,它不再使用新数据更新网格,直到我单击DataGrid 的标头。有什么想法吗???

【问题讨论】:

  • 为什么要将数据网格的 ItemsSource 更改为新集合,而不是使用视图模型提供的集合? (排序不需要更改 ItemsSource。)
  • 尝试删除Items.Refresh()。这可能会导致一些问题,因为当您设置ItemsSource 时它应该会刷新。要尝试的另一件事是在DataGrid.SetBinding(...) method 中实际传递您的新集合
  • @elgonzo 我这样做的原因是因为否则我的数据网格不会按升序或降序显示排序的数据。
  • @bewilderedprogrammer,对于排序,您可以查看 CollectionViewSource.GetDefaultView 方法和它返回的 ICollectionView 对象——您将允许控制排序。但是,这种方法有一个缺点:如果您的 GUI 中有多个 DataGrid(或 ItemsControl),则操作 CollectionView 可能会影响许多或所有这些 ItemControl(这取决于...)。继续...
  • ...(续)如果您想确保只控制特定 DataGrid 的排序,请实例化 CollectionViewListCollectionView 使用视图模型中的项目列表并将此 CollectionView 分配给 DataGrid 的 ItemsSource 属性。然后,您将使用该 CollectionView 对象来控制 DataGrid 的排序(并且仅控制该 DataGrid)。这样,您就不会为了获得数据网格的动态排序行为而弄乱项目列表和绑定。如果这是您正在寻找的东西,请告诉我,我会将其作为答案...

标签: c# wpf mvvm binding datagrid


【解决方案1】:

您似乎正在将 DataGrid 的 Items Source 从 Binding Expression(它通知 datagrid 源已更新)更改为对集合的纯引用,从而删除更新逻辑。 您应该更改源集合,而不是项目源。您可以使用 CollectionView 作为绑定表达式的来源,通过将 SortDescriptions 添加到 CollectionView 并在其上调用 Refresh 来进行排序

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2021-11-04
    • 2018-06-28
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2018-12-03
    • 2015-01-11
    • 2011-04-07
    相关资源
    最近更新 更多