Предположим, у меня есть модель (для краткости опущена полная реализация 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; }
}
a MyView.xaml
, содержащий DataGrid
(это отрывок):
<DataGrid Name="MyModelDataGrid" ItemsSource="{Binding MyModels}"/>
и, наконец, код:
public class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
DataContext = MyViewModel();
}
}
В нынешнем виде этот код будет правильно создавать DataGrid
, который успешно выполняет следующие действия:
- автоматически генерирует столбцы на основе свойств
MyModel
- , отображаемых каждыйэкземпляр MyModel (с соответствующими значениями его свойств) в виде строки
Однако любые изменения, внесенные в саму DataGrid
, не распространяются назад в соответствующиеэкземпляры MyModel
.
Я думаю (поправьте меня, если я ошибаюсь - я новичок в WPF / MVVM), что этого можно достичь, расширив объявление DataGrid
в MyView.xaml
, чтобы включить внутренние теги сстолбцы, указав Header="<MyModel.PropertyNameA" Text="{Binding PropertNameA}"
.
Но!Мне бы хотелось, чтобы это «связывание ячеек» происходило динамически (точно так же, как столбцы генерируются автоматически).Причина этого в том, что он более расширяем относительно изменений в MyModel
, то есть мне не нужно менять и MyModel
, и MyView.xaml
для дополнительных свойств.
Возможно ли это?Если так, как это можно сделать?