C# WPF MVVM: Сохранить последовательность и ширину столбцов DataGrid

	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 и привязки, как я понял :thinking:
А как тогда сохранить параметры столбцов? В интернете не смог найти способ. Вероятно, он там есть и я на него даже натыкался, но просто не понял, как это работает. Не люблю копипастить код, который не понимаю.