filtro ejemplo c# wpf data-binding datagrid itemsource

c# - ejemplo - wpf datagrid filter



¿Por qué DataGrid no se actualiza cuando se cambia ItemsSource? (4)

El ItemsSource siempre es el mismo, una referencia a su colección, sin cambios, sin actualizaciones. Podrías anularlo antes:

dgOrderDetail.ItemsSource = null; dgOrderDetail.ItemsSource = OrderDetailObjects;

Alternativamente, también puedes actualizar los elementos:

dgOrderDetail.ItemsSource = OrderDetailObjects; //Preferably do this somewhere else, not in the add method. dgOrderDetail.Items.Refresh();

No creo que realmente quieras llamar a UpdateLayout allí ...

( Negarse a usar un ObservableCollection no es una buena idea )

Tengo una cuadrícula de datos en mi aplicación wpf y tengo un problema simple. Tengo una lista genérica y quiero vincular esta colección a mi fuente de datos de cuadrícula de datos cada vez que se agrega un objeto a la colección. y no estoy interesado en usar la colección observable.

el punto es que estoy usando el mismo método en otro lugar y eso funciona bien. pero esta vez, cuando presiono el botón Agregar, se agrega un objeto y la cuadrícula de datos se actualiza correctamente, pero desde el segundo elemento agregado a la colección, Datagrid ya no se actualiza.

Aquí está el Código:

private void btnAddItem_Click(object sender, RoutedEventArgs e) { OrderDetailObjects.Add(new OrderDetailObject { Price = currentitem.Price.Value, Quantity = int.Parse(txtQuantity.Text), Title = currentitem.DisplayName, TotalPrice = currentitem.Price.Value * int.Parse(txtQuantity.Text) }); dgOrderDetail.ItemsSource = OrderDetailObjects; dgOrderDetail.UpdateLayout(); }

alguna idea ?


Si vincula el ItemSource a una lista filtrada, por ejemplo, Lambda no está actualizado. Use ICollectionView para resolver este problema (los comentarios no funcionan):

//WindowMain.tvTemplateSolutions.ItemsSource = this.Context.Solutions.Local.Where(obj=>obj.IsTemplate); // templates ICollectionView viewTemplateSolution = CollectionViewSource.GetDefaultView(this.Context.Solutions.Local); viewTemplateSolution.SortDescriptions.Clear(); viewTemplateSolution.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); viewTemplateSolution.Filter = obj => { Solution solution = (Solution) obj; return solution.IsTemplate; }; WindowMain.tvTemplateSolutions.ItemsSource = viewTemplateSolution;


También encontré eso solo haciendo

dgOrderDetails.Items.Refresh();

también lograría el mismo comportamiento.


Tengo exactamente el mismo problema. Quería actualizar mi fuente de elementos de la cuadrícula de datos en código subyacente y no actualizar nada. De hecho, fue porque también declare el origen del elemento en la cuadrícula de datos en el archivo xaml. Eso funcionó en mi computadora dev pero no en el servidor IIS. Si no declaras itemsource en datagrid en xaml, sino solo en código detrás (cuando loaded_data y filtrar o agregar) funciona bien.

Atentamente.