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));

原文地址:https://www.cnblogs.com/aning2015/p/9929945.html

时间: 2024-08-05 20:56:12

WinForm 绑定到嵌套对象上的属性的相关文章

C++中不能把普通引用绑定在常量对象上

一个不同引用必须用相同的的类型初始化. int i = 12; const int &r = i; //正确,但r不能改变i的值 int &p = r; //错误,p和r的类型不匹配 在初始化函数时,形参若需要引用,应尽量使用常量引用. ……

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

代码功能: 1.datagrid 的表头由后台生成,可以配置在数据库 2.datagrid 的列绑定数据 支撑嵌套对象 $(function() { var columns = new Array(); var cols = new Array(); var colData = new Object(); $.post("url","params",function(data){ //动态生成表头开始 if(data.xxxx != null){ $.each(da

在js对象上绑定js数组原生方法

在js对象上绑定数组方法会给当前对象添加一个lenght:0属性 例: var o = {}; [].pop.call(o) console.log(o)//返回结果Object {length: 0}

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

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, prop, descriptor) 参数 obj 需要定义属性的对象. prop 需定义或修改的属性的名字. descriptor 将被定义或修改的属性的描述符. 返回值 返回传入函数的对象,即第一个参数obj 描述EDIT 该方法允许精确添加或修改对象的属性.一般情况下,我们为对象添加属性是通过

JavaScript面向对象编程(2)对象上的特殊属性

js对象都有constructor属性,但是构造函数产生的对象和简单对象的属性有些不同,可自行运行下列代码了解 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&q

TextBox 绑定到DataTable某一列属性上

将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", dt, "columnName", true); 当修改TextBox值时,必须要鼠标手动点击对应DataTable 列单元格(绑定到DataGridView中显示)才会更新,如何实时自动更新呢? 可以在TextBox中添加Validated事件(或者MouseLeave事件)实现更新D

VS+SqlServe 在引用了webservice后刷新数据时提示:已超过传入消息(65536)的最大消息大小配额若要增加配额请使用相应绑定元素上 MaxReceivedMessageSize 属性

使用了VS建立了webservice 后,在VS项目中添加了引用,可是在今天从sqlserve中取数据时, 突然提示:已超过传入消息(65536)的最大消息大小配额若要增加配额请使用相应绑定元素上 MaxReceivedMessageSize 属性 这让我那叫一个郁闷啊,之前都是一直好用,为什么突然就不好用了????????? 后来根据提示分析和上网查资料分析,猜测可能是数据量问题,再去找如何绑定元素上 MaxReceivedMessageSize属性,经过了几个小时的处理终于找到解决方案了:

.NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置.值得推荐的做法就是采用<.NET Core采用的全新配置系统[1]: 读取配置数据>最后演示的方式将相关的配置定义成一个Options类型,并采用与类型定义想匹配的结构来定义原始的配置,这样就能利用它们之间的映射关系将读取的配置数据绑定为Options对象,我们将这种编程模式称为“Options模式”. [ 本文已经同步到<ASP.NET Core框架揭秘>之中]

js嵌套对象相等比较的一种方法 (原创)

做前端开发经常会遇到比较js对象是否相等的情况, 或者说其它问题往往会归结到这个问题上来:比如对象数组的去重复. 网上看到过很多例子, 但是基本上都是那种比较简单的对象结构, 而复杂的对象结构,比如对象嵌套对象的情况,还没找到什么直接可以用的代码. 所以今天,就花了点时间写了一个函数实现这个功能, 也是方便自己日后使用, 当然也可以供大家参考. 注释: 目前这个方法只适用于对象的属性是基本类型和对象类型, 数组类型暂时还没考虑, 后面有时间写一个全的.----所以说下面的方法相当于比较两个树 第