问题:

  需要动态为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 = ; i < ; 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 = ; i < ; 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

C# 类动态添加属性、方法的更多相关文章

  1. C# 类动态添加属性、方法(Z)

      问题: 需要动态为WPF中的DataGrid添加列,并动态绑定相应数据.(此处仅实现动态属性的添加和使用,关于动态方法的添加和使用详见推荐阅读) 实现关键点: 目标类继承DynamicObject ...

  2. ios开发runtime学习四:动态添加属性

    #import "ViewController.h" #import "Person.h" #import "NSObject+Property.h& ...

  3. python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...

  4. Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法

    1. 对象属性和类属性. 我们之前接触到,在类中,我们一般都是通过构造函数的方式去写一些类的相关属性.在第一次介绍类的时候我们把一些属性写到构造函数外面并没有用到构造函数,其实当时在写的时候,就是在给 ...

  5. Python基础之动态添加属性,方法,动态类,静态类

    ## 动态添加属性class Person: def __init__(self,name): self.name = name# 1.通过对象.属性名称来操作p = Person('KTModel' ...

  6. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言与静态语言 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C ...

  7. day_5.26python动态添加属性和方法

    python动态添加属性和方法 既然给类添加⽅法,是使⽤ 类名.⽅法名 = xxxx ,那么给对象添加⼀个⽅法 也是类似的 对象.⽅法名 = xxx '''2018-5-26 13:40:09pyth ...

  8. python动态添加属性和方法

    ---恢复内容开始--- python动态添加属性: class Person(object): def __init__(self,newName,newAge): self.name = newN ...

  9. js对象动态添加属性,方法

    1. 动态添加属性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>> ...

随机推荐

  1. eclipse安装Eclipse Memory Analyzer插件

    在Install New software中输入 http://archive.eclipse.org/mat/1.2/update-site/ 然后选择Memory Analyzer for Ecl ...

  2. 通过ipv6访问 g o o g l e

    Google.Youtube.Facebook等均支持IPv6访问,IPv4网络的用户大部分都无法访问,比如Gmail,Google Docs等等各种相关服务.而该类网站大部分均已接入IPv6网络,因 ...

  3. apk 破解

    Apk破解工具:AndroidCrackTool for Mac http://www.52pojie.cn/thread-452617-1-1.html 如何防止Unity3D代码被反编译 http ...

  4. Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar

    Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar

  5. [NHibernate]组件之依赖对象

    目录 写在前面 文档与系列文章 组件之依赖对象 一个例子 总结 写在前面 周一至周四一直在成都出差,也一直没有更新博客了,一回到家第一件事就是扒一扒最近博客园更新的文章,然后把想看的收藏了,大概有20 ...

  6. FlexPaper+SWFTool+操作类=在线预览PDF

    引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...

  7. [译]在Node中使用indicative来验证model

    原文: http://amanvirk.me/validating-models-in-node-js-using-indicative/\ 在nodejs中有关于验证model的包有许多, 我最喜欢 ...

  8. 什么时候用@Resource,什么时候用@service

    Spring中什么时候用@Resource,什么时候用@service当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定 ...

  9. [IOS基础]关于IOS的UIScreeen,UIView,UIViewController,UIWindow理解

    UIScreen: 代表当前这个屏幕,通过UIApplication可以获得这个属性 UIView:   一个矩形试图,包含用户手势和时间响应 UIViewController: 一个UIView的集 ...

  10. redirect()重新定向·