当ObservableCollection中的属性更改时,如何在Silverlight中更新DataGrid

当ObservableCollection中的属性更改时,如何在Silverlight中更新DataGrid,silverlight,data-binding,datagrid,Silverlight,Data Binding,Datagrid,我有一个绑定到ObservableCollection(MyClass)source1的Datagrid MyClass有两个属性:字符串名称、整数年龄 现在我的集合中有50个MyClass对象,这意味着我的datagrid中有50行。 如果我想看到所有的行,我必须滚动,这是好的 private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){ int index = dataGrid.Sele

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

MyClass有两个属性:字符串名称、整数年龄

现在我的集合中有50个MyClass对象,这意味着我的datagrid中有50行。 如果我想看到所有的行,我必须滚动,这是好的

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){
int index = dataGrid.SelectedIndex;
obsCollection[index].Name="AAAAA";
}
每次单击一行时,我都希望该行的名称更改为string Name=“AAAAAA”

如果我向上或向下滚动,并且该行不再显示在datagrid中,整个过程都会正常进行。不知何故,当该行看不见并随后显示时,它会被更新。当我滚动并返回到该行时,该行现在再次显示在datagrid中,该值已更新

但是我想要一个即时的改变!!只需选择/单击该行,名称将更改为“AAAAAA”。 我不想让那一行消失在视线之外,以获得更新


编辑:我不能使用datagrid.ItemsSource=null;因为我将在selectionchanged上获得无限循环,所以您需要实现ObservableCollection的通用类型。例如,您拥有
Employee
的集合,并希望当某个员工的值发生更改时UI自动更新

  • 您需要创建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));
            }
        }
    }
    
  • 将Employee用作ObservableCollection的通用参数类型,如下所示
    ObservableCollection

  • 现在,当您在ObservableCollection中更改employee的值时,该值将为您更新到UI


  • 您的项目(MyClass)是否实现INotifyPropertyChanged?这是UI查看项目本身更改的要求;公共字符串_firstName;