zoukankan      html  css  js  c++  java
  • 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上的多选操作,性能高,相应的内存占用也稍高。
  • 相关阅读:
    LeetCode-195
    中文屋子与图灵测试谁对?
    leedcode-122
    Java 网络编程
    Java File类与IO流
    Java 异常
    Java 多线程
    Java Collection集合
    Java 常用API (第二部分)
    Java 日期时间与unix时间戳之间转换
  • 原文地址:https://www.cnblogs.com/maigc249/p/5262263.html
Copyright © 2011-2022 走看看