【问题标题】:How can I do Databinding in c#?如何在 C# 中进行数据绑定?
【发布时间】:2010-09-12 00:49:41
【问题描述】:

我有以下课程

公共级汽车 { 公共名称{get;放;} }

我想以编程方式将其绑定到文本框。

我该怎么做?

在黑暗中拍摄:

... 汽车 car = new Car(); TextEdit 编辑框 = new TextEdit(); editBox.DataBinding.Add("名称", car, "汽车 - 名称"); ...

我收到以下错误

“无法绑定到目标控件上的属性“名称”。

我做错了什么,我应该怎么做?我发现来自网络开发的数据绑定概念有点难以理解。

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    你想要

    editBox.DataBindings.Add("Text", car, "Name");
    

    第一个参数是控件上要绑定数据的属性名称,第二个参数是数据源,第三个参数是数据源上要绑定的属性。

    【讨论】:

      【解决方案2】:

      不看语法,我很确定它是:

      editBox.DataBinding.Add("Text", car, "Name");
      

      【讨论】:

        【解决方案3】:
        editBox.DataBinding.Add("Text", car, "Name");
        

        第一个参数是控件属性的名称,第二个是要绑定的对象,最后一个是要用作数据源的对象属性的名称。

        【讨论】:

          【解决方案4】:

          你已经很接近数据绑定线了

          editBox.DataBinding.Add("Text", car, "Name");
          

          第一个参数是要绑定数据的编辑框对象的属性。第二个参数是要绑定的数据源,最后一个参数是要绑定的数据源的属性。

          请记住,数据绑定是一种方式,因此如果您更改编辑框,则汽车对象会更新,但如果您直接更改汽车名称,则不会更新编辑框。

          【讨论】:

            【解决方案5】:

            试试:

            editBox.DataBinding.Add( "Text", car", "Name" );
            

            【讨论】:

              【解决方案6】:

              我相信

              editBox.DataBindings.Add(new Binding("Text", car, "Name"));

              应该可以解决问题。没试过,但我认为是这样的。

              【讨论】:

                【解决方案7】:

                您正在尝试绑定到 TextEdit 控件的“名称”。该名称用于以编程方式访问控件,不能绑定。您应该对控件的文本进行绑定。

                【讨论】:

                  【解决方案8】:

                  使用 C# 4.6 语法:

                  editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));
                  

                  如果 car 为 null,那么上面的代码将比使用文字字符串表示 cardatamember 更明显的方式失败

                  【讨论】:

                    【解决方案9】:

                    以下是可以用作属性的泛型类,它实现了绑定控件用来捕获属性值变化的 INotifyPropertyChanged。

                    public class NotifyValue<datatype> : INotifyPropertyChanged 
                    {
                        public event PropertyChangedEventHandler PropertyChanged = delegate { };
                    
                        datatype _value;
                        public datatype Value
                        {
                            get
                            {
                                return _value;
                            }
                            set
                            {
                                _value = value;
                                PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
                            }
                        }
                    
                    }
                    

                    可以这样声明:

                    public NotifyValue<int> myInteger = new NotifyValue<int>();
                    

                    并分配给这样的文本框

                    Textbox1.DataBindings.Add(
                        "Text", 
                        this, 
                        "myInteger.Value", 
                        false, 
                        DataSourceUpdateMode.OnPropertyChanged
                    );
                    

                    ..其中“Text”是文本框的属性,“this”是当前的 Form 实例。

                    类不必继承 INotifyPropertyChanged 类。声明 System.ComponentModel.PropertyChangedEventHandler 类型的事件后,控件数据绑定器将订阅类更改事件

                    【讨论】:

                      【解决方案10】:

                      这是

                       this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
                      

                      【讨论】:

                        猜你喜欢
                        • 2012-10-08
                        • 1970-01-01
                        • 2011-11-12
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-05-14
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多