WPF DataGrid-动态双向绑定到ObservableCollection <t>

时间:2019-05-03 16:31:34

标签: c# wpf mvvm data-binding datagrid

假设我有一个模型(为简洁起见,省略了INotifyPropertyChanged的完整实现):

public class MyModel : INotifyPropertyChanged
{
    public int Id { get; set; }
    public string Name { get; set; }
    // ... 
}

具有视图模型(也省略了INotify的完整实现...)

public class MyViewModel : INotifyPropertyChanged 
{ 
    public int SomethingUnrelatedToProblem { get; set; }
    // ... 
    public ObservableCollection<MyModel> MyModels { get; set; } 
}

包含MyView.xaml的{​​{1}}(摘录):

DataGrid

最后是代码:

<DataGrid Name="MyModelDataGrid" ItemsSource="{Binding MyModels}"/>

就目前而言,此代码将正确构造一个public class MyWindow : Window { public MyWindow() { InitializeComponent(); DataContext = MyViewModel(); } } 并成功执行以下操作:

  • 根据DataGrid的属性自动生成列
  • 将“ MyModel”的每个实例(及其属性的相应值)显示为一行

但是,对MyModel本身所做的任何更改都不会 back 传播到DataGrid的各个实例。

我认为(如果我错了,请纠正我-我是WPF / MVVM的新手)可以通过扩展MyModel中的DataGrid声明以包括内部标记来实现此目的通过指定MyView.xaml使用列。

但是!我希望这种“单元绑定”是动态完成的(就像自动生成列一样)。这样做的原因是,它对Header="<MyModel.PropertyNameA" Text="{Binding PropertNameA}"的更改具有更大的可扩展性,也就是说,我不需要同时更改MyModelMyModel来获取其他属性。

这可能吗?如果是这样,怎么办?

0 个答案:

没有答案