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

给“变量”绑定标签分享

时间:2023-04-10 20:30:39 C#

给“变量”绑定标签假设我有一个名为INT的全局变量X。由于X是全局的,我们可以假设任何东西都可以修改它的值,因此每次都会改变它。假设我有一个名为“标签”的标签控件。这是我要完成的工作:我想将label.Text的值“绑定”到变量X。这样,当变量X发生变化时,它将反映回label.Text。现在,我不想编写事件侦听器并与委托一起玩(我想要尽可能少的代码)。有没有办法使用DataBinding组件?或任何其他新技术?谢谢,Ian如果您想使用数据绑定基础结构并反映对值所做的更改,您需要一种方法来通知UI有关对绑定值所做的更改。所以最好的方法是使用属性并像这样实现INotifyPropertyChanged接口:classfrmFoo:Form,INotifyPropertyChanged{privatestring_foo;公共字符串Foo{get{return_foo;}设置{_foo=值;OnPropertyChanged("富");}}protectedvirtualvoidOnPropertyChanged(stringproperty){if(PropertyChanged!=null)PropertyChanged(this,newPropertyChangedEventArgs(property));}#regionINotifyPropertyChanged成员publiceventPropertyChangedEventHandlerPropertyChanged;#endregion需要先在标签上设置绑定:publicfrmFoo(){InitializeComponent();lblTest.DataBindings.Add(newBinding("Text",this,"Foo"));对于多线程程序(几乎每个Windows窗体程序),iCe的答案都不是很好,因为它不会让您更改选项卡(您会遇到一些跨线程错误)。解决问题的最简单方法是在setter中创建一个属性:privatestring_labelText;publicstringlabelText{get{return_labelText;}设置{_labelText=值;更新标签文本(_labelText);//settinglabeltovalue}}whereupdateLabelText(string)是线程安全的:delegatevoidupdateLabelTextDelegate(stringnewText);privatevoidupdateLabelText(stringnewText){if(label1.InvokeRequired){//这是工作线程updateLabelTextDelegatedel=newupdateLabelTextDelegate(updateLabelText);label1.Invoke(del,newobject[]{newText});}else{//这是UI线程label1.Text=newText;我不认为你可以绑定到公共变量。变量本身不能通知监听器其值的变化。这就是为什么您需要将变量包装在属性中。在setter中,您引发一个事件来通知绑定到它的UI控件,以便它们可以刷新并显示新值。该框架有一种机制-INotifyPropertyChanged-尝试使用此链接进行操作。为X创建属性。更新setter中的label.Text属性。以上就是《C#学习教程:给“变量”绑定标签》的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——privateint_x;publicintX{get{return_x;}设置{_x=值;label.Text=_x.ToString();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: