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 返回值:设置的值 ...
随机推荐
- Windows CLI命令
目录 Windows CLI命令 1.背景 2.netstat 罗列端口号占用情况 3.telnet 远端IP的某个端口号 Windows CLI命令 1.背景 在Windows操作系统下开发,需要用 ...
- 利用 uDig 生成 GeoServer 可用的 SLD 渲染文件
利用 uDig 生成 GeoServer 可用的 SLD 渲染文件 uDig简介 uDig是一个 open source (EPL and BSD) 桌面应用程序框架,构建在Eclipse RCP和G ...
- RabbitMQ Win10安装
RabbitMQ是消息对列,主要是用于做消息代理.本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间, 它可以根据你给它的路由,缓冲规则有选择地进行传递消息.采用Erlang语言开 ...
- PHP计算二维数组指定元素的和
array_sum(array_column($arr, 'num')); //计算二维数组指定元素的和 $arr = [ [ 'id'=>1, 'num'=>3, ], [ 'id'=& ...
- windows系统搭建zookeeper
安装&配置 在apache的官方网站提供了好多镜像下载地址,然后找到对应的版本 下载地址: http://mirrors.cnnic.cn/apache/zookeeper/zookeeper ...
- Unity3D VidoePlayer 加载StreamingAssets下视频
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;usi ...
- HTTP常见响应状态码及解释、常用请求头及解释
1.HTTP常见响应状态码及解释2XX Success(成功状态码) 200 表示从客户端发来的请求在服务器端被正常处理204 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主 ...
- ReactNative: 使用导航栏组件-NavigatorIOS组件和Navigator组件
一.简言 在软件开发中,不论是Web还是App,它们的应用程序都是由很多的功能视图组成的.对于这些组合的视图,如何实现页面间平滑地过渡,应用都有统一的一套跳转机制,这个功能就是路由或者叫导航.应用程序 ...
- LeetCode 第70题动态规划算法
导言 看了 动态规划(https://www.cnblogs.com/fivestudy/p/11855853.html)的帖子,觉得写的很好,记录下来. 动态规划问题一直是算法面试当中的重点和难点, ...
- PAT 1010 Radix 进制转换+二分法
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...