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

  • 相关阅读:
    分页
    uuid算法
    mysql卸载安装
    安装和破解收费版idea
    css样式一开始不显示,点击显示隐藏
    各种技术网址
    vue加载高德地图,加标记点,点出文本框
    Security Traps 玩耍剧透(持续更新)
    最近做的一个小玩意踩的坑
    最近刷题的一个总结
  • 原文地址:https://www.cnblogs.com/maomiyouai/p/3594132.html
Copyright © 2011-2022 走看看