没有INotifiedChanges的wpf datagrid刷新

时间:2012-05-22 14:34:21

标签: wpf datagrid refresh

我在wpf中使用了datagrid,在.xaml.cs中有一些代码

List<TaskHeader> taskHeaders;
//initialization of taskHeaders
taskDataGrid.ItemsSource = taskHeaders;

所以单击刷新按钮后我需要将taskHeaders更改更新为taskDataGrid视图,但是如果没有实现ObservableCollection我找不到方法。 taskDataGrid.Items.Refresh();无效。

taskDataGrid.ItemsSource = null;
taskDataGrid.ItemsSource = taskHeaders;
taskDataGrid.Items.Refresh();

也不行 任何的想法?请帮忙

3 个答案:

答案 0 :(得分:0)

尝试

CollectionViewSource.GetDefaultView(taskHeaders).Refresh();

答案 1 :(得分:0)

我已经测试了这个并且这有效:

我的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>

我的代码背后:

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();
        }
    }
}

和我的虚拟TaskHeader类:

namespace WpfApplication
{
    public class TaskHeader
    {
        public string Property { get; set; }
    }
}

答案 2 :(得分:0)

而不是绑定整个列表,试试这个(实际上我不知道你的逻辑是怎样的,但可能对某人有所帮助)。

taskHeader值是一个TaskHeader对象。

taskDataGrid.Items.Add(taskHeader)