Я пытаюсь достичь чего-то более простого и считаю, что мой подход может быть неправильным. Я создаю сетку данных, где первый столбец имеет ширину, отличную от других. Я использую AutoGenerateColumns = true, поскольку это упрощает мою работу. Я не могу использовать чистый XAML, так как не знаю количество столбцов до времени выполнения, и я не смог соединить XAML и AutoGenerateColumns, поэтому он будет использовать макет первого столбца, а затем сгенерировать остальные.
My подходы:
1) Создайте две сетки данных рядом друг с другом - проблема с этим подходом заключается в необходимости управлять 2 отдельными сетками данных, я видел проблемы с прокруткой и настройкой их размеров, поэтому я решил изменить свой подход , чтобы сохранить все внутри одной DataGrid, поскольку данные связаны друг с другом.
2) Попытка получить объект Datagrid из Code-Behind, чтобы я мог установить свойство Width из класса ViewModel, это приведет к поломке MVVM модели, а также для меня было трудно реализовать
3) Текущий подход - используя событие AutoGeneratingColumn , я фиксирую первый столбец и пытаюсь привязаться к его WidthProperties. К сожалению, это, похоже, не работает, и я не знаю, почему.
Это мой файл кода для XAML, содержащий DataGrid
private void DG1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
string headername = e.Column.Header.ToString();
//Cancel the column you don't want to generate
if (headername == "DATE")
{
Binding binding = new Binding("DateColumnWidth");
binding.Source = DataGrid.DataContext; // DataGrid is the name of the DataGrid
binding.Mode = BindingMode.TwoWay;
binding.Path = new PropertyPath("DateColumnWidth");
BindingOperations.SetBinding(e.Column, ColumnDefinition.MinWidthProperty, binding);
BindingOperations.SetBinding(e.Column, ColumnDefinition.MaxWidthProperty, binding);
e.Column.Header = "Test";
}
}
Это мой Proprty в ViewModel , При отладке источника привязки он подключается к нужному классу, и я вижу все свои свойства. Это также меняет заголовок правой колонки.
private int _DateColumnWidth;
public int DateColumnWidth
{
get { return _DateColumnWidth; }
set
{
_DateColumnWidth = value;
RaisePropertyChanged("DateColumnWidth");
}
}
Я установил отладчик, чтобы показать мне всю информацию о трассировке привязки данных, никаких проблем не возникает, но ширина не обновляется. Что я делаю не так?