假设我有一个模型(为简洁起见,省略了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
本身所做的任何更改都不会 back 传播到DataGrid
的各个实例。
我认为(如果我错了,请纠正我-我是WPF / MVVM的新手)可以通过扩展MyModel
中的DataGrid
声明以包括内部标记来实现此目的通过指定MyView.xaml
使用列。
但是!我希望这种“单元绑定”是动态完成的(就像自动生成列一样)。这样做的原因是,它对Header="<MyModel.PropertyNameA" Text="{Binding PropertNameA}"
的更改具有更大的可扩展性,也就是说,我不需要同时更改MyModel
和MyModel
来获取其他属性。
这可能吗?如果是这样,怎么办?