WinForm 绑定到嵌套对象上的属性
WinFrom 绑定到嵌套对象上的属性
关键字: Windows Forms, DataBindings, Nested Class, 嵌套类
在 WinForm 中很早就已经支持数据绑定, 使用数据绑定可以大大减少更新界面和数据的代码.
一般情况下, 使用自定义的简单对象时数据绑定可以很好的工作, 当我们的对象越来越复杂, 一个对象中使用另一个对象作为属性时, 简单的数据绑定已经无法满足需求.
例如有下面两个对象:
/// <summary>
/// 外部实体
/// </summary>
public class Outer : INotifyPropertyChanged
{
#region - Private -
private string _name;
private Inner _inner;
#endregion
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return this._name; }
set
{
if(value != this._name)
{
this._name = value;
RaisePropertyChanged();
}
}
}
public Inner Inner
{
get { return this._inner; }
set
{
if(value != this._inner)
{
this._inner = value;
RaisePropertyChanged();
}
}
}
private void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// 内部实体
/// </summary>
public class Inner : INotifyPropertyChanged
{
#region - Private -
private string _name;
#endregion
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return this._name; }
set
{
if(value != this._name)
{
this._name = value;
RaisePropertyChanged();
}
}
}
private void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
数据绑定使用如下:
//初始化对象
var outer = new Outer();
//初始化绑定对象
var outerBindingSource = new BindingSource() { DataSource = outer };
var innerBindingSource = new BindingSource(outer, nameof(outer.Inner));
//绑定到控件
this.textBoxName.DataBindings.Add("Text", outerBindingSource, nameof(outer.Name));
this.textBoxInnerName.DataBindings.Add("Text", innerBindingSource, nameof(outer.Inner.Name));
更新: ComboBox 绑定枚举. comboBox 选择项更改时, 绑定对象的枚举属性同样更改
//1. 设置 ComboBox 数据源
this.comboBox.DataSource = Enum.GetValues(typeof(CustomEnum));
this.comboBox.SelectedIndex = 0;
//2. 设置绑定
this.comboBox.DataBindings.Add(nameof(this.comboBox.SelectedItem), bindingSource, nameof(bindingSource.CustomEnumProperty));
WinForm 绑定到嵌套对象上的属性的更多相关文章
- 组件 computed 与 vuex 中 getters 的使用,及 mapGetters 的使用,对象上追加属性,合并对象
vue 是响应式的数据,这一点相当的方便我们的操作,但有些错误的操作方法会 vue 的响应无效 除此之外我们还要了解 vue.set() 和 Object.assgin() 的使用 vue.set() ...
- 让jquery easyui datagrid列支持绑定嵌套对象
嵌套对象是指返回的json数据,是对象的某个属性自带有属性.而我们恰恰又需要这个属性,默认情况下easyui的datagrid是不支持绑定嵌套对象的.比如:datagrid的field属性只能为fie ...
- 转载 -- jquery easyui datagrid 动态表头 + 嵌套对象属性展示
代码功能: 1.datagrid 的表头由后台生成,可以配置在数据库 2.datagrid 的列绑定数据 支撑嵌套对象 $(function() { var columns = new Array() ...
- 关于spring data redis repository @RedisHash注解的对象上有DateTime属性字段的问题
当你save保存的时候你会发现出现StackOverflow Exception,很明显出现了无限循环,可是仅仅是一个save操作,哪里来的无限循环呢? 最终发现就是DateTime导致的,因为将对象 ...
- TextBox 绑定到DataTable某一列属性上
将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", ...
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...
- WPF绑定xaml中绑定对象需用属性表示,字段不可以绑定
在练习WPF绑定时发现对象属性可以在XAML中绑定,但字段是不可以绑定: 比如: private Person person{get;set;} 可以绑定到XAML中,<TextBox Nam ...
- js对象可扩展性和属性的四个特性(上)
# js对象可扩展性和属性的四个特性(上) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...
- vue 数组中嵌套的对象添加新属性--页面更新
vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735
随机推荐
- Exp3 免杀原理与实践 20164320 王浩
一.实验内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...
- 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)
HTTP是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存. ——HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Co ...
- ubuntu 下dns一类的处理
如何关掉Ubuntu内置的dnsmasq服务 sudo vi /etc/NetworkManager/NetworkManager.conf找到dns=dnsmasq,在前面增加“#”,也就是把这句注 ...
- zookeeper的使用demo(c#/java)
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它 ...
- 安卓微信端打开H5页面背景图被键盘挤压移动位置解决
问题:在微信端(安卓浏览器也如此)打开的H5登录页面中,点击输入信息,弹出软键盘会挤压背景图片. 本来的body宽高设置body{width:100%,height:100%},不起作用,这样写就会导 ...
- 扎实学Java之数组与方法
什么是数组? 数组是一个容器,用来存储多个数据(数据类型相同) 声明一个数组就是在内存中开辟一串连续的空间 数组的结构和基本要素 标识符:数组的名称,用于区分不同的数组 数组元素:向数组中存放的数据 ...
- PHP----------php的opcache扩展配置参数介绍
[opcache]zend_extension = "路径/ext/php_opcache.dll" ; Zend Optimizer + 的开关, 关闭时代码不再优化.opcac ...
- GDI和内核对象区别
1.GDI对象和核心对象之间最主要的区别在于GDI对象有单一拥有者,不是进程就是线程 2.核心对象可以有一个以上的拥有者,甚至可以跨进程,为了保持对每一位(拥有者)的追踪,核心对象保持了一个引用计数, ...
- 虚拟机设置固定ip可以使shell远程连接到服务器
配置vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR = 你的本机ip 192.168.1. 的范围内 NETMASK = 255.255.2 ...
- 【003:使用SW4STM32不进入中断的原因】
系统环境: ubuntu 16.04 64bit开发环境:SW4STM32记录时间: 2017年07月01日联系方式: yexiaopeng1992@126.com背景: 在ubuntu下使用ST官方 ...