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

    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

  • 相关阅读:
    刘汝佳,竖式问题
    二叉树
    sort
    hash
    贪心算法
    FFT,NTT 专题
    hdu 5861 Road 两棵线段树
    hdu 5862 Counting Intersections
    hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法
    hdu 5800 To My Girlfriend + dp
  • 原文地址:https://www.cnblogs.com/liangyuwen/p/15358746.html
Copyright © 2011-2022 走看看