2012-05-22 61 views
0

我所以點擊刷新按鈕,我需要更新我的taskHeaders變成taskDataGrid視圖後,已經在WPF數據網格和.xaml.csWPF數據網格刷新不INotifiedChanges

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

一些代碼,但我不能找到方式而不實施ObservableCollection。 taskDataGrid.Items.Refresh();不起作用。

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

不工作太 任何想法?請幫助

+1

爲什麼你不想用什麼工作得很好? – Yatrix

回答

0

嘗試

CollectionViewSource.GetDefaultView(taskHeaders).Refresh(); 
+0

沒有幫助:( – artos

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; } 
    } 
} 
+0

謝謝Stipo,你選擇我的方式瞭解按鈕單擊事件或其他用戶的行動是必要的得到的DataGrid刷新,這裏是所有的情況說明: – artos

+0

沒有問題,如果你是滿意的。回答,請儘量接受它,謝謝。 – Stipo

0

而是綁定整個列表的,試試這個(其實我不知道如何是你的邏輯,但可能會幫助別人)。

taskHeader值是一個TaskHeader對象。

taskDataGrid.Items.Add(taskHeader)