DataGrid: 数据项更新并保持多选

     DataGrid绑定的后台数据源,对于数据源更新的情况,如,某些数据的某些字段需要更新,若直接列改旧数据源A为新的数据源的源B,显示的数据没有问题,但有一个问题就是界面的原先的选择项,多选或单选,便不会保持,针对需要保持多选项的情况,有以下两种方案:
     1     筛选出需要更新的项,并不移除,只需要挨个对其所有属性赋值即可,多选项可以保持,但问题是需要对额外添加Merge类,即如何对两个对象进行赋值;
     2     使用一个中间类:
     如 ObservableCollection<T>需要更改为ObservableCollection<EntityWrap<T>>,而EntityWrap的定义简单如下:
    public class EntityWrap<T>:INotifyPropertyChanged
    {
        public EntityWrap(T entity)
        {
            _entity = entity;
        }

        private T _entity;

        public T Entity
        {
            get { return _entity; }
            set
            {
                _entity = value; 
                RaiseChanged("Entity");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void RaiseChanged(string Name)
        {
            if (null != PropertyChanged)
                PropertyChanged(this, new PropertyChangedEventArgs(Name));
        }
    }
    UI上绑定需要修改为 {Entity.Pro}这样。这样对于需要更新的entity直接赋值为新的对象即可,而不会改变UI上绑定对象的引用,即不会丢失多选状态。
 方案1 对于实体类型简单的情况下,比较方便,但当属性太多时,不得不采用反射赋值的方式,而反射的性能+可以需要更新的数据项较多时,性能可能难以忍受。方案2使用额外的对象来保持UI上的多选操作,性能高,相应的内存占用也稍高。
posted @ 2016-03-10 15:59  magic249  阅读(350)  评论(0编辑  收藏  举报