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 绑定到嵌套对象上的属性的更多相关文章

  1. 组件 computed 与 vuex 中 getters 的使用,及 mapGetters 的使用,对象上追加属性,合并对象

    vue 是响应式的数据,这一点相当的方便我们的操作,但有些错误的操作方法会 vue 的响应无效 除此之外我们还要了解 vue.set() 和 Object.assgin() 的使用 vue.set() ...

  2. 让jquery easyui datagrid列支持绑定嵌套对象

    嵌套对象是指返回的json数据,是对象的某个属性自带有属性.而我们恰恰又需要这个属性,默认情况下easyui的datagrid是不支持绑定嵌套对象的.比如:datagrid的field属性只能为fie ...

  3. 转载 -- jquery easyui datagrid 动态表头 + 嵌套对象属性展示

    代码功能: 1.datagrid 的表头由后台生成,可以配置在数据库 2.datagrid 的列绑定数据 支撑嵌套对象 $(function() { var columns = new Array() ...

  4. 关于spring data redis repository @RedisHash注解的对象上有DateTime属性字段的问题

    当你save保存的时候你会发现出现StackOverflow Exception,很明显出现了无限循环,可是仅仅是一个save操作,哪里来的无限循环呢? 最终发现就是DateTime导致的,因为将对象 ...

  5. TextBox 绑定到DataTable某一列属性上

    将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", ...

  6. Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...

  7. WPF绑定xaml中绑定对象需用属性表示,字段不可以绑定

    在练习WPF绑定时发现对象属性可以在XAML中绑定,但字段是不可以绑定: 比如: private Person person{get;set;}  可以绑定到XAML中,<TextBox Nam ...

  8. js对象可扩展性和属性的四个特性(上)

    # js对象可扩展性和属性的四个特性(上) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...

  9. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

随机推荐

  1. 在win7上跑基于任少卿作者代码修改的RPN+BF实验

    1.前言 之前在win10上成功的跑起来faster-rcnn的实验,并且跑了一下CaltechPedestrian的数据集,但是效果一直不理想,折腾了好久也没弄清楚到底原因出在哪里,直到读了Is F ...

  2. linux touch命令 创建文件

    touch 创建文件,用法,touch test.txt,如果文件存在,则表示修改当前文件时间 [root@MongoDB ~]# touch /data/text.txt [root@MongoDB ...

  3. angular当router使用userhash:false时路由404问题

    angular当router使用userhash:false时路由404问题 安装iis urlrewrite2.0组件 在根目录下创建 Web.config <configuration> ...

  4. 贝塞尔曲线java实现

    主类:BezierFrame package bezierT; import java.awt.Color; import java.awt.Dimension; import java.awt.Ev ...

  5. 2019.04.16 python基础50

    第五十一节  pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...

  6. 60.Vue:将px转化为rem,适配移动端

    1.下载lib-flexible 我使用的是vue-cli+webpack,所以是通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main. ...

  7. java代码审计中的一些常见漏洞及其特征函数

    文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...

  8. “QObject调用moveToThread()后 该如何释放”及QThread 的启动关闭

    1 QThread *thread = new QThread( ); 2 Task *task = new Task(); 3 task->moveToThread(thread); 4 co ...

  9. unity组件路径自动生成

    unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...

  10. ubuntu装好jupyter启动失败问题

    ::/jupyter/nbserver-.json: [Errno ] Permission denied: '/run/user/1000/jupyter/nbserver-35390.json' ...