WinForm 绑定到嵌套对象上的属性

Posted aning2015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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));

以上是关于WinForm 绑定到嵌套对象上的属性的主要内容,如果未能解决你的问题,请参考以下文章

wpf 控件属性通过数据绑定到某个集合的某一个数据上。

使用嵌套片段和动画对象

如何绑定到不是当前绑定上下文的viewmodel上的属性

GridView 与嵌套类的属性绑定

在 Winform 中,为啥当我在一个数据源上调用 PropertyChanged 时所有绑定的属性都会更新?

父属性更改时嵌套属性的 WPF 绑定更新通知