【问题标题】:How to update DataGrid in Silverlight when Property in ObserveableCollection changed当 ObserveableCollection 中的属性更改时如何在 Silverlight 中更新 DataGrid
【发布时间】:2011-12-09 08:31:19
【问题描述】:

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

MyClass 有 2 个属性:字符串名称,int AGE

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

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

每次我点击一行时,我都希望该行上的名称更改为字符串 Name="AAAAAA";

如果我向上或向下滚动并且该行不再显示在数据网格中,那么整个事情都会起作用。不知何故,该行在看不见时会更新,然后再显示。当我滚动并返回该行并且该行现在再次在数据网格中显示时,该值已被更新。

但我想要立即改变!只需选择/单击该行并将名称更改为“AAAAAA”。 我不想让那一行消失,以获取更新。

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

【问题讨论】:

  • 您的项目 (MyClass) 是否实现了 INotifyPropertyChanged?这是 UI 看到项目本身的变化的要求。

标签: silverlight data-binding datagrid


【解决方案1】:

您的 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<Employee>

  3. 使用 Employee 作为 ObservableCollection 的通用参数类型
  4. 现在,当您更改 ObservableCollection 中员工的值时,该值将更新为您的 UI。

【讨论】:

  • 啊,明白了;公共字符串_firstName;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多