actualización de cuadrícula de datos wpf sin INotifiedChanges

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

preguntado el 22 de mayo de 12 a las 15:05

¿Por qué no quieres usar lo que funciona realmente bien? -

3 Respuestas

Trata

CollectionViewSource.GetDefaultView(taskHeaders).Refresh();

contestado el 22 de mayo de 12 a las 15:05

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

Gracias Stipo, me eliges para entender que el evento de clic de botón u otra acción del usuario es necesaria para actualizar DataGrid, aquí está toda la descripción de la situación: - artos

No hay problema. Si está satisfecho con la respuesta, acéptela como la mejor posible. Gracias. - Stipo

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 or haz tu propia pregunta.