当前位置:  开发笔记 > 编程语言 > 正文

数据绑定到C#中的对象

如何解决《数据绑定到C#中的对象》经验,为你挑选了2个好方法。

Objective-c/cocoa提供了一种绑定形式,其中控件的属性(即文本框中的文本)可以绑定到对象的属性.我试图在C#w/.Net 3.5中复制此功能.

我在MyClass.cs文件中创建了以下非常简单的类:

class MyClass
{
    private string myName;

    public string MyName
    {
        get
        {
            return myName;
        }

        set
        {
            myName = value;
        }
    }

    public MyClass()
    {
        myName = "Allen";
    }
}

我还创建了一个带有1个文本框和1个按钮的简单表单.我在表单代码中初始化了一个Myclass实例并构建了项目.使用Vs2008中的DataSource向导,我选择了基于对象创建数据源,并选择了MyClass程序集.这创建了一个数据源实体.我将文本框的数据绑定更改为此数据源; 但是,预期的结果(文本框的内容将是"allen")未实现.此外,将文本放入文本框不会更新对象的name属性.

我知道我在这里缺少一些基本的东西.在某些时候,我应该将我在表单代码中初始化的MyClass类的实例绑定到文本框,但是没有发生.我在网上看到的一切似乎都掩盖了使用DataBinding和一个对象(或者我完全没有标记),所以任何帮助都非常感激.

编辑:

利用我从答案中学到的东西,我查看了Visual Studio生成的代码,它具有以下内容:

this.myClassBindingSource.DataSource = typeof(BindingTest.MyClass);

如果我评论出来并替代:

this.myClassBindingSource.DataSource = new MyClass();

我得到了预期的行为.为什么VS生成的默认代码是这样的?假设这比工作方法更正确,我应该如何修改我的代码才能在VS生成的范围内工作?



1> Jason Coyne..:

您必须将文本框的数据源指定为新的数据源.但另外,您必须将数据源的数据源分配为您的类的实例.

MyDataSource.DataSource = new MyClass();
TextBox1.DataSource = MyDataSource;

这应该适用于你的第一次传球.正如其他人所提到的,如果您要通过任何后台进程修改类属性,则可能需要在类上实现其他接口(INotifyPropertyChanged等).

如果您只是通过表单更新属性,则不需要此步骤.


TextBox1.DataBindings.Add("Text",> Your Object <,"> PropertyName <");

2> Frederik Ghe..:

您应该为MyClass类型实现INotifyPropertyChanged接口:

public class MyClass : INotifyPropertyChanged
{
   private string _myName;

   public string MyName
   {
       get { return _myName; }
       set
       {
          if( _myName != value )
          {
              _myName = value;
              OnPropertyChanged("MyName");
          }
       }
   }

   public event PropertyChangedEventHandler PropertyChanged;

   private void OnPropertyChanged(string propertyName)
   {
       if( PropertyChanged != null )
           PropertyChanged( this , new PropertyChangedEventArgs(propertyName) );
   }       
}

如果要支持简单数据绑定,则此接口是DataBinding基础结构所必需的.INotifyPropertyChanged接口用于通知"绑定"属性已更改,因此DataBinding基础结构可以相应地执行操作.

然后,您可以将MyName属性数据绑定到文本框的Text属性.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有