Tengo un WPF DataGrid
que contiene algunos datos. Me gustaría establecer el ancho de las columnas de modo que el contenido encaje y nunca se recorta (en cambio, una barra de desplazamiento horizontal debería ser visible). Además, quiero que el DataGrid
llene todo el lugar disponible (estoy trabajando con un DockPanel
). Estoy utilizando el siguiente código (simplificado):¿Cómo puedo establecer el ancho de un DataGridColumn para que se ajuste a los contenidos ("Auto"), pero complete por completo el espacio disponible para el DataGrid en MVVM?
<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>
Al parecer, esto no funciona fuera de la caja con Width="Auto"
, ya que siempre se ve algo como esto:
Esto, obviamente, se ve feo. Me gustaría tener toda la fila seleccionada, o, lo que sería mucho mejor, las columnas para llenar todo el ancho, pero como se puede ver, esto no funciona.
En su lugar, si utilizo Width="*"
, el contenido de las columnas se recorta, lo que es aún peor para mí.
Encontré un similar question here, y una solución fue publicada allí. Esto puede funcionar, pero estoy trabajando con el patrón MVVM, por lo que el ItemsSource se actualiza en el ViewModel y no puedo pensar en una forma de hacerlo a partir de allí, porque no puedo acceder a la propiedad DataGridColumn
del ActualWidth
. Además, me gustaría hacerlo solo en XAML si es posible.
Agradeceria cualquier ayuda. ¡Gracias!
Editar: Como todavía no tengo ni idea de qué hacer al respecto, comienzo una pequeña recompensa. Estaría muy feliz con una sugerencia de lo que se podría hacer con mi problema. ¡Gracias de nuevo!
Editar 2: Después de la respuesta de saus, pensé nuevamente en las opciones. El problema es que necesito actualizar las propiedades Width
y MinWidth
también durante la ejecución de la aplicación, por lo que no solo después de cargar la ventana. Ya he intentado hacer algo como
column.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
column.MinWidth = column.ActualWidth;
column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
en algún evento que se dispara cuando el ItemsSource
subyacente de la DataGrid
es la actualización. Sin embargo, esto no funciona, ya que la propiedad ActualWidth
no parece cambiar después de configurar el Width
en Auto
. ¿Existe una opción para "volver a pintar" de alguna manera para obtener la propiedad ActualWidth
actualizada? ¡Gracias!
No estoy seguro de entender lo que quiere hacer aquí. Si el ancho de la columna se hace más ancho que el 'DataGrid', ¿desea una barra de desplazamiento vertical y no desea que el texto se ajuste? ¿Te refieres a una barra de desplazamiento horizontal? De lo contrario, esto no tiene sentido para mí, pero tal vez estoy lento aquí :) –
¡Gracias por la pista! Por supuesto que me refería a una barra de desplazamiento horizontal, de lo contrario no tendría ningún sentido ;-) –