2009-07-10 12 views
14

¿Qué evento se dispara cuando la fuente de DataGrid se está actualizando? He intentado DataContextChanged y SourceUpdated, pero nunca funcionó.WPF DataGrid cómo obtener cuando ItemsSource actualiza

En realidad, necesito algo simple. Quiero, si llega una nueva fila, deslice la barra de desplazamiento de GridView hacia abajo para ver de qué se trataba.

+0

Cuando dice "cuando un nuevo filas viene en" qué se refiere a el origen de datos subyacente (base de datos) o al origen de datos de DataGrid? –

+0

Quise decir ItemsSource de GridView. – Agzam

Respuesta

27

que tenían el mismo problema y me las arreglo de esta manera

DataGrid myGrid = new DataGrid(); 
CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(myGrid.Items); 
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(DataGrid_CollectionChanged); 

A continuación, deberá implementar la lógica del controlador de eventos DataGrid_CollectionChanged.

3

Si está intentando actualizar la cuadrícula cuando algo se agrega a la base de datos, eso no va a suceder. Estoy más familiarizado con WinForms que con WPF, pero asumo que no hay una forma mágica de mantener una cuadrícula sincronizada con la base de datos sin escribir un proceso en segundo plano que compruebe continuamente los cambios en la base de datos.

Si está actualizando la fuente de datos real de la grilla (por ejemplo, la Colección), entonces eso actualizará la grilla.

+0

Sí, tengo algo de colección, y está vinculado con GridView a través de ItemsSource. – Agzam

+0

En realidad, una de las ventajas de WPF sobre WinForms es la capacidad de enlazar una grilla a a un conjunto de datos y hacer que la actualización de la UI automágicamente –

7

Establezca NotifyOnTargetUpdated = true para el enlace ItemsSource y maneje el evento TargetUpdated. Si tiene enlaces múltiples, busque Propiedad DataTransferEventArgs para averiguar si el objetivo es ItemsSource o no.

2

Por mi parte, he utilizado la notificación SelectionChange que elevan cada evento Del/Añadir/Editar/Seleccionar Es un trabajo muy bien

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Console.WriteLine("hi"); 
} 
Cuestiones relacionadas