当ObserveableCollection中的Property发生更改时,如何在Silverlight中更新DataGrid

时间:2011-10-17 14:19:03

标签: silverlight data-binding datagrid

我有一个绑定到ObserveableCollection(MyClass)source1的Datagrid;

MyClass有2个属性:string Name,int AGE

现在我在Collection中有50个MyClass Objets,这意味着我的数据网格中有50行。 如果我想看到所有行,我必须滚动,这没关系!!

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

每次我点击一行,我想在那一行名称更改为字符串名称=“AAAAAA”;

如果我向上或向下滚动并且数据网格中不再显示该行,则整个过程都有效。不知何故,当行在视线之外并且稍后显示时,该行将获得更新。当我滚动并返回到该行并且数据网格中的行现在再次显示时,该值已更新。

但我想要立即改变!!只需选择/单击该行,名称将更改为“AAAAAA”。 我不希望看到那一行,以获得更新。

编辑:我不能使用datagrid.itemsssource = null;因为我会在selectionchanged上获得无限循环

1 个答案:

答案 0 :(得分: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. 使用Employee作为ObservableCollection的通用参数类型,如ObservableCollection<Employee>

  3. 现在,当您在ObservableCollection中更改employee的值时,该值将更新为UI。