Estoy usando WPF Toolkit Datagrid en una de las aplicaciones en las que estoy trabajando. Lo que quiero es almacenar el ancho de la columna y el índice de visualización como una preferencia del usuario. Lo logré para displayindex de columna, pero para cambiar el tamaño no pude encontrar ningún evento en la cuadrícula de datos que se activará después de cambiar el tamaño de la columna. He intentado el evento "SizeChanged", que supongo que solo se activa cuando se calcula inicialmente el tamaño y también para toda la cuadrícula de datos y no para las columnas individuales.
¿Alguna solución alternativa o si alguien sabe sobre el evento?WPF Toolkit DataGrid tamaño de columna evento
Respuesta
Puede intentar extender DataGrid
y luego implementar un evento NotifyPropertyChange
. Algo como esto:
class MyDataGrid : DataGrid, INotifyPropertyChanged
{
private DataGridLength _columnWidth;
public DataGridLength ColumnWidth
{
get { return _columnWidth; }
set
{
_columnWidth = value;
NotifyPropertyChanged("ColumnWidth");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
A partir de ahí, se puede añadir una delagate al controlador para hacer lo que quiere que haga. Algo así como:
MyDataGrid dataGrid;
//init grid, do stuff
dataGrid.PropertyChanged += new PropertyChangedEventHandler(ColumnWidthChanged);
//ColumnWidthChanged will be a method you define
Ahora que tiene la delagate, se puede definir lo que queremos que suceda cuando el ancho de columna se cambia:
private void ColumnWidthChanged(object sender, PropertyChangedEventArgs args)
{
if(args.PropertyName.Equals("ColumnWidth"))
{
//Do stuff now that the width is changed
}
}
Se dará cuenta de que estoy comprobando para los cuales la propiedad fue cambiada La forma en que lo configuro es tal que puede extender otras propiedades y hacer que los manejadores también cambien. Si desea más de un controlador, probablemente sea mejor hacer un método DataGridPropertyChanged
que active qué propiedad se modificó. Luego llamaría al método apropiado (como ColumnWidthChanged
) para cada propiedad que cambia. De esta forma, no tendrá que verificar que cada controlador solo modifique una propiedad.
No especificó un idioma, por lo que etiqueté esto como C#. Sin embargo, debería ser lo suficientemente simple para transponer a VB si eso es lo que estás usando.
Espero que esto ayude!
Supongo que desea guardar los anchos de columna para que la próxima vez que se inicie la aplicación se usen los mismos anchos de columna para generar la cuadrícula de datos.
Si ese es el caso, una alternativa es guardar los anchos de columna (y los índices) cuando se cierra la aplicación, lo que también sería más eficiente que guardar los anchos cada vez que se cambia el tamaño de una columna.
Dependiendo de cómo se estructure su aplicación, algo como esto debería funcionar ...
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
foreach (DataGridColumn column in dataGrid1.Columns)
{
// save the column.Width property to a user setting/file/registry/etc...
// optionally save the displayindex as well...
}
}
Hola, ¿puedes darme alguna pista sobre cómo copiar el valor de C# a xaml? He intentado esto: Diccionario
tomado de ...:
http://forums.silverlight.net/post/602788.aspx
después de la carga:
PropertyDescriptor pd = DependencyPropertyDescriptor
.FromProperty(DataGridColumn.ActualWidthProperty,
typeof(DataGridColumn));
foreach (DataGridColumn column in Columns) {
//Add a listener for this column's width
pd.AddValueChanged(column,
new EventHandler(ColumnWidthPropertyChanged));
}
2 métodos:
private bool _columnWidthChanging;
private void ColumnWidthPropertyChanged(object sender, EventArgs e)
{
// listen for when the mouse is released
_columnWidthChanging = true;
if (sender != null)
Mouse.AddPreviewMouseUpHandler(this, BaseDataGrid_MouseLeftButtonUp);
}
void BaseDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_columnWidthChanging) {
_columnWidthChanging = false;
// save settings, etc
}
}
ColumnWidthPropertyChanged se dispara constantemente mientras el usuario arrastra el ancho. Agregar el controlador PreviewMouseUp le permite procesar cuando el usuario finaliza.
¿Disposición actualizadas?
Estoy trabajando en Silverlight, y la cuadrícula se recupera/actualiza cada segundo.
Estoy utilizando el método LayoutUpdated, que se activa para cada evento de actualización de diseño.
Puede mantener un diccionario de los anchos de columna y verificar los deltas. Entonces sabría qué columna (s) había cambiado.
- 1. WPF ToolKit DataGrid Performance
- 2. WPF Toolkit Datagrid - Custom Tabbing
- 3. Wpf Toolkit. Enlazar encabezado de columna de DataGrid a DynamicResource
- 4. WPF DataGrid Columna Ancho
- 5. WPF toolkit datagrid texto de celda envoltura
- 6. WPF Toolkit Datagrid: ¿cómo desactivas la selección?
- 7. WPF DataGrid de WPF toolkit vs ListView - ¿algún beneficio?
- 8. ¿Cómo puedo ordenar un DataGridTemplateColumn en un WPF Toolkit DataGrid?
- 9. Evento para Seleccionar todo: WPF Datagrid
- 10. Necesita temas para los controles de WPF Toolkit (especialmente DataGrid)
- 11. WPF Toolkit DataGrid Multi-Select: ¿Cómo obtener Selected Items out?
- 12. C#/WPF: DataGrid Toolkit - transponer filas y columnas
- 13. WPF DataGrid: por qué la columna adicional
- 14. WPF Datagrid vinculando encabezados de columna personalizados
- 15. Validación de la columna Force DataGrid (WPF)
- 16. WPF Datagrid: evento SelectionChanged no se produce cuando SelectionUnit = "Celda"
- 17. WPF Datagrid Fila Edición evento "ENDED"
- 18. WPF DataGrid - Ocultar columna usando un CheckBox
- 19. WPF DataGrid dimensionar el contenido de una columna de plantilla
- 20. Preordenamiento de un DataGrid en WPF
- 21. WPF Datagrid Performance
- 22. WPF: evento de cambio de tamaño GridViewColumn
- 23. Estilo WPF DataGrid-Silverlight DataGrid?
- 24. Columnas dinámicas WPF MvvM DataGrid
- 25. Prevent WPF 4.0 Datagrid de Mostrando columna vacía
- 26. DateTimePicker wpf toolkit binding
- 27. Número de fila WPF Datagrid
- 28. tiempo WPF Datagrid formato hh: mm campo
- 29. ¿Cómo manejar el evento Wpf DataGrid CellEditEnding en MVVM?
- 30. Filtro WPF DataGrid
Esto realmente no ayuda porque solo tiene un ancho de columna y su evento solo se incrementará si la columna cambia de tamaño en el código, algo que podría atrapar de todos modos. – MikeKulls