una titulo obtener nombre net encabezado columna color cambiar cabecera asp ancho wpf xaml gridview binding itemssource

wpf - obtener - cambiar titulo columna gridview



El ancho de la columna GridView no se actualiza al cambiar ItemsSource (2)

Tengo un GridView donde estoy configurando el ItemsSource en código subyacente. Todas las columnas en la cuadrícula se definen en XAML, y todos los anchos de columna son "Auto". Cuando inicialmente configuré ItemsSource de la grilla, los anchos de las columnas están configurados correctamente.

Ahora, dependiendo de las acciones del usuario, ItemsSource de la grilla se puede establecer en una nueva EntityCollection. Lo que he notado es que los anchos de columna permanecen como estaban con el ItemsSource anterior. Es decir, el ancho de las columnas no parece ajustarse automáticamente cuando se establece un nuevo ItemsSource para la Grilla. ¿Hay alguna forma en el código subyacente o XAML para forzar a la cuadrícula a usar la nueva ItemsSource cuando se establecen los anchos de columna? Creo que esto sería algo que GridView haría automáticamente cuando se restablezca ItemsSource.

<ScrollViewer VerticalScrollBarVisibility="Auto"> <ListView> <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Width="Auto" Header="Status"> <GridViewColumn.CellTemplate> <DataTemplate> <Image Width="16" Height="16" Source="{Binding Path=Blocking}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Width="Auto" Header="Title"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView.Columns> </GridView> </ListView.View> </ListView> </ScrollViewer>


Creé la siguiente clase y la utilicé en la aplicación donde fuera necesario en lugar de GridView

/// <summary> /// Represents a view mode that displays data items in columns for a System.Windows.Controls.ListView control with auto sized columns based on the column content /// </summary> public class AutoSizedGridView : GridView { protected override void PrepareItem(ListViewItem item) { foreach (GridViewColumn column in Columns) { //setting NaN for the column width automatically determines the required width enough to hold the content completely. //if column width was set to NaN already, set it ActualWidth temporarily and set to NaN. This raises the property change event and re computes the width. if (double.IsNaN(column.Width)) column.Width = column.ActualWidth; column.Width = double.NaN; } base.PrepareItem(item); } }


Use este código después de actualizar ItemsSource:

public void AutoSizeGridViewColumns(ListView listView) { GridView gridView = listView.View as GridView; if (gridView != null) { foreach (var column in gridView.Columns) { if (double.IsNaN(column.Width)) column.Width = column.ActualWidth; column.Width = double.NaN; } } }