zoukankan      html  css  js  c++  java
  • C# 类动态添加属性、方法

    问题:

      需要动态为WPF中的DataGrid添加列,并动态绑定相应数据.(此处仅实现动态属性的添加和使用,关于动态方法的添加和使用详见推荐阅读)

    实现关键点:

      目标类继承DynamicObject,添加动态属性集合,并重写方法TrySetMember()和TryGetMember() 

    ---------------

    自测效果:


    --------------

    复制代码
    public void BtnQuery()
            {
                var view = this.GetView() as MainScreenView;
                if (view != null)
                {
                    view.dgdNurseScheduleStatistics.Columns.Clear();
                    var scheduleClassList = Connectors.NurseScheduleStatisticsConnector.GetInstance.FindScheduleClassList().OrderBy(item => item.Id);
    
                    if (scheduleClassList != null)
                    {
                        List<NurseScheduleStatisticsModel> modelList = new List<NurseScheduleStatisticsModel>();
    
                        for (int i = 0; i < 10; i++)
                        {
                            dynamic model = new NurseScheduleStatisticsModel();
                            model.col0 = i;
                            model.col1 = i;
                            model.col2 = i;
                            model.col3 = i;
                            model.col4 = i;
                            modelList.Add(model);
                        }
    
                        for (int i = 0; i < 5; i++)
                        {
                            DataGridTextColumn column = new DataGridTextColumn();
                            column.Header = "col" + i;
                            column.Binding = new Binding("col" + i);
    
                            view.dgdNurseScheduleStatistics.Columns.Add(column);
                        }
                        view.dgdNurseScheduleStatistics.ItemsSource = modelList;
                    }
                }
            }
    复制代码
    复制代码
    public class NurseScheduleStatisticsModel : DynamicObject
        {
            public string EmpName { get; set; }
            public string TotalHour { get; set; }
            public string TotalWork { get; set; }
    
            Dictionary<string, object> Properties = new Dictionary<string, object>();
    
            public override bool TrySetMember(SetMemberBinder binder, object value)
            {
                if (!Properties.Keys.Contains(binder.Name))
                {
             //在此可以做一些小动作

              //if (binder.Name == "Col")
              //  Properties.Add(binder.Name + (Properties.Count), value.ToString());
              //else
              //  Properties.Add(binder.Name, value.ToString());

    
                    Properties.Add(binder.Name, value.ToString());
                }
                return true;
            }
            public override bool TryGetMember(GetMemberBinder binder, out object result)
            {
                return Properties.TryGetValue(binder.Name, out result);
            }
        }
    复制代码

    效果图:

     

    推荐阅读http://www.cnblogs.com/serviceboy/archive/2010/04/16/1713688.html

                  http://msdn.microsoft.com/zh-cn/library/system.dynamic.dynamicobject.trysetmember(v=vs.110).aspx

     

    原文地址http://www.cnblogs.com/maomiyouai/p/3594132.html

  • 相关阅读:
    Java.util.concurrent包学习(一) BlockingQueue接口
    [转载]最牛B的编码套路
    思考人生
    非奇异矩阵的零度互补法则
    Hopfield 网络(下)
    Hopfield 网络(上)
    矩阵的相似性与对角化
    左右特征向量
    特征多项式、代数重数与几何重数
    特征值和特征向量
  • 原文地址:https://www.cnblogs.com/dfyg-xiaoxiao/p/7213754.html
Copyright © 2011-2022 走看看