我在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();
也不行 任何的想法?请帮忙
答案 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)