Como posso definir a largura de um DataGridColumn para caber no conteúdo ("Auto"), mas preencher completamente o espaço disponível para o DataGrid no MVVM?

Eu tenho um WPFDataGrid que contém alguns dados. Gostaria de definir a largura das colunas para que o conteúdo caiba e nunca seja cortado (em vez disso, uma barra de rolagem horizontal deve ficar visível). Além disso, eu quero oDataGrid para preencher todo o local disponível (estou trabalhando com umDockPanel) Estou usando o seguinte código (simplificado):

<DataGrid ItemsSource="{Binding Table}">
    <DataGrid.Columns>
        <DataGridTextColumn MinWidth="100" Width="Auto" Header="Column 1" Binding="{Binding Property1}" />
        <DataGridTextColumn MinWidth="200" Width="Auto" Header="Column 2" Binding="{Binding Property2}" />
    </DataGrid.Columns>
</DataGrid>

Aparentemente, isso não funciona imediatamente comWidth="Auto" como sempre se parece com isso:

Obviamente, isso parece feio. Gostaria de ter a linha inteira selecionada ou, o que seria muito melhor, as colunas para preencher toda a largura, mas, como se pode ver, isso não funciona.

Se eu usarWidth="*" em vez disso, o conteúdo das colunas é cortado, o que é ainda pior para mim.

Achei umpergunta semelhante aqui, e uma solução alternativa foi postada lá. Isso pode funcionar, mas estou trabalhando com o padrão MVVM, portanto, oO ItemsSource é atualizado no ViewModel e não consigo pensar em uma maneira de fazê-lo a partir daí, porque não consigo acessar oActualWidth propriedade doDataGridColumn. Além disso, eu gostaria de fazê-lo apenas em XAML, se possível.

Eu apreciaria qualquer ajuda. Obrigado!

Edit: Como eu ainda não tenho idéia do que fazer sobre isso, começo uma pequena recompensa. Eu ficaria muito feliz com uma sugestão do que se poderia fazer com o meu problema. Obrigado novamente!

Edit 2: Após a resposta da lingüiça, pensei nas opções novamente. O problema é que preciso atualizar oWidth e aMinWidth propriedades também durante a execução do aplicativo, portanto, não somente após o carregamento da janela. Eu já tentei fazer algo como

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

em algum caso, que é acionado quando o subjacenteItemsSource doDataGrid está atualizando. No entanto, isso não funciona, pois oActualWidth A propriedade parece não mudar depois de definir oWidth emAuto. Existe uma opção para "repintar" de alguma forma, a fim de obter oActualWidth propriedade atualizada? Obrigado!

questionAnswers(7)

yourAnswerToTheQuestion