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!