actualización de cuadrícula de datos wpf sin INotifiedChanges
Frecuentes
Visto 1,144 veces
0
Tengo datagrid en wpf y algo de código en .xaml.cs
List<TaskHeader> taskHeaders;
//initialization of taskHeaders
taskDataGrid.ItemsSource = taskHeaders;
Entonces, después de hacer clic en el botón Actualizar, necesito actualizar mis cambios de TaskHeaders en la vista TaskDataGrid, pero no puedo encontrar el camino sin implementar ObservableCollection. taskDataGrid.Items.Refresh();
no está trabajando.
taskDataGrid.ItemsSource = null;
taskDataGrid.ItemsSource = taskHeaders;
taskDataGrid.Items.Refresh();
no funciona demasiado alguna idea? por favor ayuda
3 Respuestas
0
Trata
CollectionViewSource.GetDefaultView(taskHeaders).Refresh();
contestado el 22 de mayo de 12 a las 15:05
0
He probado esto y esto funciona:
Mi XAML:
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Button DockPanel.Dock="Bottom" Content="Change list and refresh grid" Click="OnRefreshButtonClicked"/>
<DataGrid x:Name="taskDataGrid"/>
</DockPanel>
Mi código detrás:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
namespace WpfApplication
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var taskHeaders = new List<TaskHeader>();
for (int i = 0; i < 10; ++i)
taskHeaders.Add(new TaskHeader() { Property = "Property " + i });
this.taskDataGrid.ItemsSource = taskHeaders;
}
private void OnRefreshButtonClicked(object sender, RoutedEventArgs e)
{
var taskHeaders = (List<TaskHeader>)this.taskDataGrid.ItemsSource;
// Make changes on taskHeaders by removing first item.
taskHeaders.RemoveAt(0);
CollectionViewSource.GetDefaultView(taskHeaders).Refresh();
}
}
}
y mi clase ficticia TaskHeader:
namespace WpfApplication
{
public class TaskHeader
{
public string Property { get; set; }
}
}
contestado el 22 de mayo de 12 a las 16:05
0
En lugar de vincular toda la lista, intente con esta (en realidad, no sé cuál es su lógica, pero puede ayudar a alguien).
El valor taskHeader es un objeto TaskHeader.
taskDataGrid.Items.Add(taskHeader)
Respondido el 25 de diciembre de 14 a las 14:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas wpf datagrid refresh or haz tu propia pregunta.
¿Por qué no quieres usar lo que funciona realmente bien? - Yatrix