2009-12-01 57 views
2

我有以下的風光:Silverlight 3 - 如何「刷新」DataGrid內容?

1 using System; 
2 using System.Windows; 
3 using System.Windows.Controls; 
4 using System.Windows.Documents; 
5 using System.Windows.Ink; 
6 using System.Windows.Input; 
7 using System.Windows.Media; 
8 using System.Windows.Media.Animation; 
9 using System.Windows.Shapes; 
10 using System.Collections.Generic; 
11 
12 namespace refresh 
13 { 
14  public partial class MainPage : UserControl 
15  { 
16   
17   List c = new List(); 
18 
19   public MainPage() 
20   { 
21    // Required to initialize variables 
22    InitializeComponent(); 
23    c.Add(new Customer{ _nome = "Josimari", _idade = "29"}); 
24    c.Add(new Customer{_nome = "Wesley", _idade = "26"}); 
25    c.Add(new Customer{_nome = "Renato",_idade = "31"});  
26    
27    this.dtGrid.ItemsSource = c; 
28   } 
29 
30   private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
31   { 
32    c.Add(new Customer{_nome = "Maiara",_idade = "18"}); 
33   } 
34   
35  } 
36  
37  public class Customer 
38  { 
39   public string _nome{get; set;} 
40   public string _idade{get; set;} 
41  } 
42 } 

其中,dtGrid是我的DataGrid控件...

的問題是:如何獲得再增加一個寄存器到我的清單後更新了UI。

我去解決它設置DataGrid的物品來源爲「」,然後設置爲客戶對象的名單再次,這樣的:

1 private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
2  
3 { 
4  
5 c.Add(new Customer{_nome = "Maiara",_idade = "18"}); 
6  
7 this.dtGrid.ItemsSource=""; 
8  
9 this.dtGrid.ItemsSource=c; 
10 
11 } 
12 

是否有一種方式來獲得更新的用戶界面或DataGrid的itemsSource在更新,更改或刪除列表c中的項目後自動刷新?

謝謝

Josimari Martarelli

回答

8

我建議考慮結合,INotifyPropertyChanged的,DataContexts和的ObservableCollection。

  1. 更改您的ListObservableCollection。這本身就可能會解決一些你的問題......作爲ObservableCollection不僅僅是一個簡單的List

  2. 多了幾分穩健但是,如果你想解決更多的問題是這樣,你會看着你的DataGrid綁定到您的通過XAML <DataGrid... ItemsSource="{Binding MyList}">

  3. 對象列表爲了綁定你DataGridList,你將需要設置視圖的DataContext。這可以是一個簡單的放置在你的構造:this.DataContext = this;設置你的DataContext告訴視圖到哪裏找數據時,看到Binding聲明

  4. 然後,解決像一個你(改變的東西不刷新的問題該視圖),您將在您的課堂上實施INotifyPropertyChanged界面。這將允許後面的代碼向視圖發送通知,以告知它何時更改。

下面是會實現這個C#代碼:

public partial class MainPage : UserControl, INotifyPropertyChanged 
{ 
    private ObservableCollection<Customer> _MyList = 
     new ObservableCollection<Customer>(); 
    public ObservableCollection<Customer> MyList 
    { 
     get { return _MyList; } 
    } 

    public MainPage() 
    {      
     InitializeComponent(); 

     this.DataContext = this; 

     MyList.Add(new Customer{ _nome = "Josimari", _idade = "29"}); 
     MyList.Add(new Customer{_nome = "Wesley", _idade = "26"}); 
     MyList.Add(new Customer{_nome = "Renato",_idade = "31"}); 

     OnPropertyChanged("MyList"); // This only works if you use bindings. 
    } 

    private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     MyList.Add(new Customer{_nome = "Maiara",_idade = "18"}); 

     OnPropertyChanged("MyList"); // This only works if you use bindings. 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

耶利米, 即使使用3°的Silverlight版本,它仍然需要使用的ObservableCollection通知性質的變化? 謝謝, Josimari Martarelli – 2009-12-01 19:46:40

+1

根據MSDN站點(http://msdn.microsoft.com/en-us/library/ms668604(VS.95).aspx)可觀察的集合應該在項目添加時通知或刪除...但它不會通知何時更新項目。因此,我總是建議每當列表更改時通知模式。這是一個好習慣。祝你好運! – Jeremiah 2009-12-01 22:04:01