当前位置: 首页 > 编程语言 > C#

C#中DataBindingtoObjects分享

时间:2023-04-10 13:31:30 C#

C#中DataBindingtoObjectsObjective-c/cocoa提供了一种绑定形式,控件的属性(即文本框中的文本)可以绑定到一个一个对象的属性。我试图在C#w/.Net3.5中复制此功能。我在MyClass.cs文件中创建了以下非常简单的类:classMyClass{privatestringmyName;publicstringMyName{get{returnmyName;}设置{我的名字=值;}}publicMyClass(){myName="Allen";我还创建了一个带有1个文本框和1个按钮的简单表单。我在表单代码中初始化了一个Myclass实例并构建了项目。使用Vs2008中的DataSource向导,我选择了创建一个基于对象的数据源,并选择了MyClass程序集。这将创建一个数据源实体。我将文本框的数据绑定更改为该数据源;然而,没有达到预期的结果(文本框的内容将是“allen”)。此外,将文本放入文本框不会更新对象的名称属性。我知道我在这里遗漏了一些基本的东西。在某些时候,我应该将我在表单代码中初始化的MyClass类的实例绑定到文本框,但那没有发生。我在网上看到的所有内容似乎都掩盖了对对象使用数据绑定(或者我根本没有标记它),因此非常感谢任何帮助。编辑:使用我从答案中学到的知识,我查看了VisualStudio生成的代码,它具有以下内容:this.myClassBindingSource.DataSource=typeof(BindingTest.MyClass);如果我将其注释掉并替换:this.myClassBindingSource.DataSource=newMyClass();我得到了预期的行为。为什么VS生成的默认代码是这样的?假设这比正常的工作方式更正确,我应该如何修改我的代码以在VS生成的范围内工作?您必须将文本框的数据源指定为新的数据源。但另外,您必须将数据源的数据源分配为您的类的实例。MyDataSource.DataSource=newMyClass();TextBox1.DataSource=MyDataSource;这应该适用于您的第一遍。正如其他人所提到的,如果您要通过任何后台进程修改类属性,则可能需要在您的类上实现其他接口(INotifyPropertyChanged等)。如果您只是通过表单更新属性,则不需要此步骤。您应该为MyClass类型实现INotifyPropertyChanged接口:publicclassMyClass:INotifyPropertyChanged{privatestring_myName;公共字符串MyName{get{return_myName;}set{if(_myName!=value){_myName=value;OnPropertyChanged("我的名字");}}}公共事件PropertyChangedEventHandlerPropertyChanged;privatevoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null)PropertyChanged(this,newPropertyChangedEventArgs(propertyName));如果你想支持简单的数据绑定,这个接口是DataBinding基础设施所必需的。INotifyPropertyChanged接口用于通知“绑定”属性已更改,因此DataBinding基础结构可以相应地采取行动。然后,您可以将MyName属性数据绑定到文本框的Text属性。我在DataBinding.Add("TEXT",myObject,myObjectProperty)方法中收到一条错误消息这可能是因为您错过了明确的{get;set;}在属性声明中!错误:publicstringFirstName;//好:publicstringFirstName{get;放;看起来您可能需要MyName属性上的Bindable属性(并遵循Frederik的建议):[System.ComponentModel.Bindable(true)]publicstringMyName{get{return_myName;}set{if(_myName!=value){_myName=value;OnPropertyChanged("我的名字");通过:http://support.microsoft.com/kb/327413我没有任何代码,但我认为数据源有点像集合。您必须将MyClass的实例添加到数据源,这就是表单字段将绑定到的实例。还有一些方法可以将数据源导航到MyClass的多个实例,但这听起来不像您需要的那样。检查数据源的文档。我认为您不需要实现任何花哨的接口。我似乎记得数据源上的一种方法,该方法在更改某些值后刷新或重新绑定当前项目。使用System.Collections.Generic;公共类SiteDataItem{私有字符串_text;私有字符串_url;私人int_id;私有int_parentId;publicstringText{get{return_text;}设置{_text=值;}}publicstringUrl{get{return_url;}设置{_url=值;}}publicintID{get{return_id;}设置{_id=值;}}publicintParentID{get{return_parentId;}设置{_parentId=值;}}publicSiteDataItem(intid,intparentId,stringtext,stringurl){_id=id;_parentId=parentId;_text=文本;_url=网址;}publicstaticListGetSiteData(){ListsiteData=newList();siteData.Add(newSiteDataItem(1,0,"所有网站",""));siteData.Add(newSiteDataItem(2,1,"搜索引擎",""));siteData.Add(newSiteDataItem(3,1,"新闻网站",""));siteData.Add(newSiteDataItem(4,2,"Yahoo","http://www.yahoo.com"));siteData.Add(newSiteDataItem(5,2,"MSN","http://www.msn.com"));siteData.Add(newSiteDataItem(6,2,"谷歌","http://www.google.com"));siteData.Add(newSiteDataItem(7,3,"CNN","http://www.cnn.com"));siteData.Add(newSiteDataItem(8,3,"BBC","http://www.bbc.co.uk"));siteData.Add(newSiteDataItem(9,3,"FOX","http://www.foxnews.com"));returnsiteData;}}更详细的可以看教程dapforCOM以上就是C#学习教程的全部内容:C#中数据绑定到对象,如果对大家有用需要了解一下more关于C#学习教程,希望大家多多关注---本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如有转载请注明出处: