c# - 如何在 WPF 中刷新 DataGrid

标签 c# wpf mvvm

我有一个问题。

我有这个 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; }
}

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

我如何通知网格反射(reflect)详细列表中的更改? 谢谢!!!!

编辑

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

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

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

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

当然,当我保存信息时,我需要将详细信息映射回原始模型。我还可以更改 WCF 服务背后的原始模型,但我不知道 WCF 将如何与 ObservableCollection 使用react。

谢谢!

最佳答案

WPF 需要知道项目已更改并且 List<T>不实现INotifyCollectionChanged 。如果您要更改您的 Detail属性(property)为ObservableCollection<myOrderDetail>那么你应该可以开始了,当添加或删除项目时网格将会更新。

关于c# - 如何在 WPF 中刷新 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251434/

相关文章:

c# - 为什么接口(interface)不能用作类型参数?

c# - 以编程方式单击 Xamarin.Forms 中的按钮

c# - 文本框标题有位置属性吗?

c# - 绑定(bind)命令的正确方法

C# var关键字混淆: Type 'object' does not contain a definition for. ..错误

c# - 将 View 接口(interface)实例传递给 ViewModel

C#/WPF,如何使窗口(使用 Window.ShowDialog() 创建)在单击其父窗口时标题栏闪烁(就像 MessageBox 一样)?

silverlight-4.0 - 由 ViewModel 中的事件触发的 View 中的 ControlStoryboardAction

c# - 使用CustomSort对ListCollectionView进行排序

c# - 无法将类型 ResponseBase 隐式转换为 Response