2011-10-17 50 views
1

我有一個Datagrid綁定到ObserveableCollection(MyClass)source1;如何在ObserveableCollection屬性更改時更新Silverlight中的DataGrid

MyClass的有2個屬性:字符串名稱,詮釋AGE

現在我有50個MyClass的OBJETS的集合,這意味着我在我的DataGrid 50行。 如果我想看到所有的行,我必須滾動,這是好的!

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){ 
int index = dataGrid.SelectedIndex; 
obsCollection[index].Name="AAAAA"; 
} 

每次我點擊一行,我想那行上的名稱更改爲字符串Name =「AAAAAA」;

整個事情工作,如果我向上或向下滾動,行不再顯示在數據網格中。不知何故,行在視線之外並且稍後顯示時會得到更新。當我滾動並返回到該行,現在該行在數據網格中再次顯示時,該值已被更新。

但我想要立即改變!只需選擇/單擊該行並將名稱更改爲「AAAAAA」。 我不想讓那一行看不見,以獲得更新。

編輯:我不能使用datagrid.itemsssource = null;因爲我會在選擇上得到無限循環

+0

你的物品(MyClass)實現INotifyPropertyChanged嗎?這是用戶界面查看項目本身更改的要求。 –

回答

2

ObservableCollection的一般類型需要實現INotifyPropertyChanged。例如,您擁有Employee的集合,並希望在某個員工的值更改時自動更新UI。

  1. 您需要創建Employee類並實現INotifyPropertyChanged。

    public class Employee : INotifyPropertyChanged 
    { 
        public string FirstName 
        { 
         get { return this._firstName; } 
         set 
         {   
          this._firstName = value; 
          this.NotifyPropertyChanged("FirstName"); 
         } 
        } 
    
        public event PropertyChangedEventHandler PropertyChanged; 
    
        private void NotifyPropertyChanged(String info) 
        { 
         if (PropertyChanged != null) 
         { 
          PropertyChanged(this, new PropertyChangedEventArgs(info)); 
         } 
        } 
    } 
    
  2. 使用員工的泛型參數類型的ObservableCollection這樣ObservableCollection<Employee>

  3. 現在,當您更改的ObservableCollection員工的值,該值將更新到用戶界面爲您服務。

+0

你是什麼意思._firstName ??? – Gero

+0

啊得到它;公共字符串_firstName; – Gero

+0

大THX Ekk。問題解決了! – Gero

相關問題