Как я могу установить ширину DataGridColumn так, чтобы она соответствовала содержимому («Авто»), но полностью заполнить доступное пространство для DataGrid в MVVM?

У меня есть WPF DataGrid , содержащий некоторые данные. Я хотел бы установить ширину столбцов так, чтобы содержимое умещалось и никогда не обрезалось (вместо этого должна быть видна горизонтальная полоса прокрутки). Кроме того, я хочу, чтобы DataGrid заполнил все доступное место (я работаю с DockPanel ). Я использую следующий код (упрощенный):


    
        
        
    

Очевидно, это не работает из коробки с Width = "Auto" , так как всегда выглядит примерно так:

DataGrid: only the first part of the row is marked as "selected"

Это явно выглядит некрасиво. Я бы хотел, чтобы была выделена вся строка или, что было бы намного лучше, столбцы, чтобы заполнить всю ширину, но, как вы можете видеть, это не работает.

Если я использую Width = "*" вместо этого, содержимое столбцов обрезается, что для меня еще хуже.

Я нашел аналогичный вопрос здесь , и решение было опубликовано там. Это может сработать, но я работаю с шаблоном MVVM, поэтому ItemsSource обновляется в ViewModel , и я не могу придумать, как это сделать оттуда, потому что я не могу получить доступ к ActualWidth свойства DataGridColumn . Кроме того, я хотел бы сделать это только в XAML, если это возможно.

Буду признателен за любую помощь. Спасибо!

Редактировать: Так как я до сих пор не знаю, что с этим делать, я начинаю небольшое вознаграждение. Я был бы очень рад предложению, что можно сделать с моей проблемой. Еще раз спасибо!

Редактировать 2: После ответа Суса я снова подумал о вариантах. Проблема в том, что мне нужно обновить свойства Width и MinWidth также во время работы приложения, а не только после загрузки окна. Я уже пытался сделать что-то вроде

column.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
column.MinWidth = column.ActualWidth;
column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);

в некотором случае, который запускается, когда обновляется базовый ItemsSource DataGrid . Однако это не работает, поскольку свойство ActualWidth не меняется после установки Width на Авто . Есть ли возможность как-то «перекрасить» его, чтобы обновить свойство ActualWidth ? Спасибо!

23
задан Community 23 May 2017 в 12:25
поделиться