internal class Model
{
public string Name { get; set; }
public int Id { get; set; }
}
internal class ViewModel
{
public ObservableCollection<Model> Items { get; }
public ViewModel()
{
Items = new ObservableCollection<Model>()
{
new Model() { Name = "Item1", Id = 60 },
new Model() { Name = "Item2", Id = 666 }
};
}
}
XAML:
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<DataGrid ItemsSource="{Binding Items}"
AutoGenerateColumns="False"
GridLinesVisibility="None"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="ID" Binding="{Binding Id}" />
</DataGrid.Columns>
</DataGrid>
Застрял на том, что хочу поменять столбцы местами и сохранить их последовательность. Поменять местами - не проблема. Можно просто перетащить мышкой. А как потом это сохранить?
Можно пойти простым путём и добавить в модель свойства DisplayIndex и Width. Потом привязать их в XAML. Тогда сохранить параметры не будет проблемой. Но тогда нарушится принцип распределения ответственности, так как модель не должна знать ничего о столбцах таблицы. Она вообще ни о чём не должна знать. Обращаться к компонентам окна напрямую из ViewModel по-умолчанию тоже нельзя. А если проделать некоторые хитровывернутые операции с кодом и сделать так, чтобы стало можно (хотя, это вроде как работает не со всеми компонентами и я не уверен, что с DataGrid это тоже сработает), на MVVM так делать не принято. На MVVM всё должно делаться через XAML и привязки, как я понял ![]()
А как тогда сохранить параметры столбцов? В интернете не смог найти способ. Вероятно, он там есть и я на него даже натыкался, но просто не понял, как это работает. Не люблю копипастить код, который не понимаю.