WPF 动态生成对象属性 (dynamic)

项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思
缺点 加载速度会慢 很明显的慢
解决办法 尽量减轻动态属性的量~
参考文章
https://www.cnblogs.com/maomiyouai/p/3594132.html
https://www.cnblogs.com/dingli/archive/2012/06/14/2548687.html(这个没看明白 但是冥冥中让我觉得 收藏一下以后可能会用)
代码
属性类 想研究明白的 看参考文章
-
public class NurseScheduleStatisticsModel : DynamicObject
-
{
-
-
-
Dictionary<string, object> Properties = new Dictionary<string, object>();
-
-
public override bool TrySetMember(SetMemberBinder binder, object value)
-
{
-
if (!Properties.Keys.Contains(binder.Name))
-
{
-
-
Properties.Add(binder.Name, value.ToString());
-
}
-
return true;
-
}
-
public override bool TryGetMember(GetMemberBinder binder, out object result)
-
{
-
return Properties.TryGetValue(binder.Name, out result);
-
}
-
}
生成临时数据
-
private ObservableCollection<NurseScheduleStatisticsModel> GetNameDataLlist()
-
{
-
-
dynamic model = new NurseScheduleStatisticsModel();
-
model.Name = "市川 賞子";
-
model.Class_ = "B";
-
model.JOb = "リーダー";
-
model.Num = "1";
-
model.Num1 = "r1";
-
model.Num2 = "R1";
-
model.Num3 = "r1";
-
model.Num4 = "r1";
-
model.Num5 = "T1";
-
dynamic model2 = new NurseScheduleStatisticsModel();
-
model2.Name = "石田";
-
model2.Class_ = "B";
-
model2.JOb = "リーダー";
-
model2.Num = "2";
-
model2.Num1 = "r2";
-
model2.Num2 = "R2";
-
model2.Num3 = "r3";
-
model2.Num4 = "r2";
-
model2.Num5 = "T2";
-
dynamic model3 = new NurseScheduleStatisticsModel();
-
model3.Name = "安达 鮎美";
-
model3.Num = "3";
-
model3.Class_ = "B";
-
model3.JOb = "リーダー";
-
model3.Num1 = "r2";
-
model3.Num2 = "R3";
-
model3.Num3 = "r2";
-
model3.Num4 = "r3";
-
model3.Num5 = "T3";
-
-
modelList.Add(model);
-
modelList.Add(model2);
-
modelList.Add(model3);
-
-
-
-
return modelList;
-
-
}
动态增加列和绑定datagrid
dl.Binding = new Binding("Num" + (i + 1) );
这里的bing 绑定的就是对象里的Num1~开始的对象
-
for (int i = 0; i < 10; i++)
-
{
-
DataGridTextColumn dl = new DataGridTextColumn();
-
dl.Header='num'+i;
-
-
dl.Binding = new Binding("Num" + (i + 1) );
-
dataGrid.Columns.Add(dl);
-
}
-
dataGrid.ItemsSource = GetNameDataLlist();
我在项目里 使用一个自定义对象 来包含 dynamic 动态对象 减少不必要的开销
对象
-
public class NameList : INotifyPropertyChanged
-
{
-
public event PropertyChangedEventHandler PropertyChanged;
-
-
public NameList(string name, string jOb, string class_, int num, NurseScheduleStatisticsModel model) { Name = name; Class_ = class_; JOb = jOb; Num = num; Ml = model; }
-
-
-
private string name;
-
-
public string Name
-
{
-
get { return name; }
-
set
-
{
-
name = value;
-
if (PropertyChanged != null)
-
{
-
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
-
}
-
-
}
-
}
-
private int num;
-
-
public int Num
-
{
-
get { return num; }
-
set
-
{
-
num = value;
-
if (PropertyChanged != null)
-
{
-
PropertyChanged(this, new PropertyChangedEventArgs("Num"));
-
}
-
}
-
}
-
private string class_;
-
-
public string Class_
-
{
-
get { return class_; }
-
set
-
{
-
class_ = value;
-
if (PropertyChanged != null)
-
{
-
PropertyChanged(this, new PropertyChangedEventArgs("Class_"));
-
}
-
}
-
}
-
-
-
-
private string jOb;
-
-
public string JOb
-
{
-
get { return jOb; }
-
set
-
{
-
jOb = value;
-
if (PropertyChanged != null)
-
{
-
PropertyChanged(this, new PropertyChangedEventArgs("JOb"));
-
}
-
}
-
}
-
-
private NurseScheduleStatisticsModel ml;
-
-
public NurseScheduleStatisticsModel Ml
-
{
-
get { return ml; }
-
set { ml = value;
-
if (PropertyChanged != null)
-
{
-
PropertyChanged(this, new PropertyChangedEventArgs("Ml"));
-
}
-
}
-
}
-
-
-
-
}
模拟数据
-
private ObservableCollection<NameList> GetNameDataLlist2()
-
{
-
-
dynamic model = new NurseScheduleStatisticsModel();
-
-
model.Num1 = "r1";
-
model.Num2 = "R1";
-
model.Num3 = "r1";
-
model.Num4 = "r1";
-
model.Num5 = "T1";
-
dynamic model2 = new NurseScheduleStatisticsModel();
-
-
model2.Num1 = "r2";
-
model2.Num2 = "R2";
-
model2.Num3 = "r3";
-
model2.Num4 = "r2";
-
model2.Num5 = "T2";
-
dynamic model3 = new NurseScheduleStatisticsModel();
-
-
model3.Num1 = "r2";
-
model3.Num2 = "R3";
-
model3.Num3 = "r2";
-
model3.Num4 = "r3";
-
model3.Num5 = "T3";
-
-
//modelList.Add(model);
-
//modelList.Add(model2);
-
//modelList.Add(model3);
-
-
listName.Add(new NameList("市川 賞子", "リーダー", "B", 1, model));
-
listName.Add(new NameList("石田", "リーダー", "C", 2, model2));
-
listName.Add(new NameList("安达 鮎美", "リーダー", "C", 3, model3));
-
-
return listName;
-
-
}
绑定动态列
需要在套一层Ml对象来引用
-
for (int i = 0; i < LS.Count; i++)
-
{
-
DataGridTextColumn dl = new DataGridTextColumn();
-
dl.Header=LS[i];
-
-
dl.Binding = new Binding("Ml.Num" + (i + 1) );
-
dataGrid.Columns.Add(dl);
-
}
就是慢 的有这点数据量就要4秒~6秒 loading加载提示肯定是要有了
希望有人有更好 更成熟的方法

WPF 动态生成对象属性 (dynamic)的更多相关文章
- C++ 动态生成对象
1.啰嗦一下 说起C++,很多人都觉着难学,其实我也是这么觉着的,在这个移动端火到爆的时代,我都想改行了,移动端做东西那都是现有的第三方库,拿来就可以用,而且稳定性好,开发速度快,而且最关键的是出东西 ...
- 利用runtime动态生成对象?
利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...
- python-根据字符串动态生成对象eval
# -*- coding: utf-8 -*- stock1={ 'stockName':"沈阳机床", ", 'averagePrice_yesterday':34.0 ...
- cglib根据数据动态生成对象
最近有个任务:根据查询SQL直接导出报表 实现关键是,怎么根据sql查询的数据动态生成对象列表,想到Cglib动态代理实现 废话少说,上代码: 定义动态生成Java Bean类: import jav ...
- WPF 动态生成DataGrid及动态绑定解决方案
一.场景 有过WPF项目经验的朋友可能都知道,如果一个DataGrid要绑定静态的数据是非常的简单的(所谓静态是指绑定的数据源的类型是静态的),如下图所示,想要显示产品数据,只需绑定到一个产品列表即可 ...
- 根据xml配置使用反射动态生成对象
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...
- 使用WPF动态生成Code 39条形码
最近在看些条形码方面相关的资料,而如果只是看的话,效果似乎并不怎么好,所以决定动手做点Demo,以增强对相关知识的记忆. 这里是一个我编写的使用WPF生成Code 39的例子,Code 39的编码很简 ...
- vue动态添加对象属性,视图不渲染
发现数据确实改变了.但是视图没有渲染.原因是赋值的问题,应该这样动态增加属性 vm.$set(vm.template.titleAttachInfoDetail,newKey,newVal) vm 当 ...
- Vue动态新增对象属性
Vue.set( target, key, value ) 参数: {Object | Array} target {string | number} key {any} value 返回值:设置的值 ...
随机推荐
- js中关于带数字类型参数传参丢失首位数字0问题
最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉. 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456. 原 ...
- A Code Farmer‘s Entertainment
My guitar playing and singing 码农的自娱自乐 https://v.youku.com/v_show/id_XNDM4NTY1MTEwNA==.html?spm=a2hzp ...
- BIM工程信息管理系统-EF实体框架数据操作基类
EF实体框架数据操作基类主要是规范增.改.查.分页.Lambda表达式条件处理,以及异步操作等特性,这样能够尽可能的符合基类这个特殊类的定义,实现功能接口的最大化重用和统一. 1.程序代码 /// & ...
- 十二、ITK例程-医疗图像配准的HelloWorld程序
一.说明 医疗图像配准是ITK的一个重要内容,而我们今天想要说的一个程序则相当于是其中的HelloWorld程序. 程序源码位置: InsightToolkit-\Examples\Registrat ...
- 小程序-picker组件选择数量
<!-- detail.wxml --> <view class="picker"> <picker range="{{range}}&qu ...
- CSP2019 游记
\(\text{CSP 2019}\) 游记 \[\text{草}\] \[\text{By:Luckyblock}\] \[Day\ -1:\] \(19:00\) 送行饭, 被摁在墙角干了 因为偏 ...
- js之好看的鼠标点击-光标特效
1.光标特效 <script src="https://blog-static.cnblogs.com/files/axqa/bubbleCursor.js">< ...
- view WITH CHECK OPTION where-clause violation(查看与检查选项where-子句违反)
创建视图的语句是设置了 WITH CHECK OPTION 这个条件; 创建视图时,sql语句是这样写的: CREATE OR REPLACE VIEW RZ_TST_VIEW AS WHER ...
- Linux下使命令不受终端断开的影响,保持在后台运行的几种方法及原理
摘自https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 记录一下Linux下使命令不受终端断开的影响,保持在后台运行的几个方法及其原理.当用 ...
- Selenium(十五):unittest单元测试框架(一) 初识unittest
1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下 ...