【问题标题】:How can i refresh my DataGrid on WPF如何在 WPF 中刷新我的 DataGrid
【发布时间】:2015-08-27 13:59:54
【问题描述】:

我有问题。

我有这个 WPF GridView

<DataGrid 
  ItemsSource="{Binding Path=myOrder.Detail}">
</DataGrid>

我在 viewModel 上的属性如下所示:

public myOrderModel myOrder { get; set; }

这是我的模型:

public partial class myOrderModel
{
    public int ID_Order { get; set; }
    public List<myOrdenDetail> Detail { get; set; }
}

在视图模型的构造函数中,用来自 WCF 服务的数据填充我的订单,详细信息会正确显示在网格上(当然,此代码已简化)。现在我需要从视图模型内部修改 de Detail 集合(添加、删除或修改)。问题是 gridview 没有刷新以显示此更改。

如何通知网格以反映详细列表中的更改? 谢谢!!!!

编辑

按照建议,我尝试使用 ObservableCollection 并且它有效。在 viewModel 我添加一个属性:

public ObservableCollection<myOrdenDetail> Detail{ get; set; }

并将模型映射到我的新属性:

Detail = new ObservableCollection<myOrdenDetail>(myOrder.Detail);

当然,当我保存信息时,我需要将 Detail 映射回原始模型。我也可以更改 WCF 服务背后的原始模型,但我不知道 WCF 将如何与 ObservableCollection 反应。

谢谢!

【问题讨论】:

  • 自从我使用 WPF 以来已经有一段时间了,但据我所知,List 应该是 ObservableCollection,您应该使用 INotifyPropertyChanged 事件来告诉 View 进行更新。
  • 你能用ObservableCollection&lt;myOrdenDetail&gt; Detail代替List&lt;myOrdenDetail&gt; Detail试试
  • 谢谢凯尔。查看我的更新。

标签: c# wpf mvvm


【解决方案1】:

WPF 需要知道项目已更改并且List&lt;T&gt; 没有实现INotifyCollectionChanged。如果您要将Detail 属性更改为ObservableCollection&lt;myOrderDetail&gt;,那么您应该很高兴,并且当添加或删除项目时,网格将更新。

【讨论】:

  • 好的,但要做到这一点,我应该改变我在 WCF 服务背后的模型。 ObservableCollection 是否与 WCF 兼容?
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2014-07-27
  • 2011-03-26
  • 2012-12-09
  • 2013-11-06
  • 2010-12-19
相关资源
最近更新 更多