【问题标题】:Text Box Databinding in a Winform App, what am I missing [closed]Winform应用程序中的文本框数据绑定,我错过了什么[关闭]
【发布时间】:2011-01-14 22:33:00
【问题描述】:

我正在尝试在 WinForm 应用程序中运行的用户控件中实现一些非常简单的数据绑定。用户控件是这样扩展的-->

    public partial class ucDiagnosis : XtraUserControl, INotifyPropertyChanged

然后在那个用户控件上我有这个属性 -->

    private string m_Pets;
    public string Pets
    {
        get
        {
            return m_Pets;
        }
        set
        {
            if (value != this.m_Pets)
            {
                this.m_Pets = value;
                NotifyPropertyChanged("Pets");
            }
        }
    }

然后在构造函数中我有这个 -->

    tbxListPets.DataBindings.Add("Text",this, Pets);

接下来我在我的活动区域中有这个 -->

    public event PropertyChangedEventHandler PropertyChanged;

接下来我有这个方法-->

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

最后,在我将数据加载到控件中的方法中,我有这个 -->

    var additionalDiagnosis = BLLMcp.GetPlanDiagnosisAddtional(planID);
    Pets = additionalDiagnosis.Rows[0]["Pets"].ToString();

程序运行,但文本框保持空白。无论我输入什么,它都会立即清除。此外,我在 Setter 上放置了一个断点,该断点在初始加载时被调用,并将正确的数据分配给 value,但它不会更新文本框。此外,无论我在框中输入什么,Setter 都不会再次被调用。


我的进一步尝试

所以我似乎已经让它工作了,但我很困惑如何,如果它真的是。我只是在我的 LoadData() 方法中添加了这一行和其他两行 -->

            tbxListPets.Text = addtionalDiagnosis.Pets;

为什么我必须在设置属性后显式设置文本框?这不是 Data Binding 为我做的事情,还是我设法搞砸了,只实现了单向绑定?

【问题讨论】:

    标签: c# winforms data-binding .net-3.5 user-controls


    【解决方案1】:
    tbxListPets.DataBindings.Add("Text",this, Pets);
    //                                        ^^^^
    

    难道不应该是:

    tbxListPets.DataBindings.Add("Text", this, "Pets");
    //                                         ^^^^^^
    

    请注意原始代码中缺少的双引号。

    您需要将属性的名称(将绑定到 UI 控件)指定为字符串。 WinForms 将能够通过反射或TypeDescriptor 机制检索该属性的值。

    如果省略引号,则会尝试将 UI 控件绑定到名称等于 Pets 的当前值的属性(这几乎绝对不是您想要的)。

    另请参阅: ControlBindingsCollection.Add reference page on MSDN

    【讨论】:

    • 男孩,我觉得自己很笨。感谢您花时间教我“系鞋带……”
    猜你喜欢
    • 2011-08-31
    • 2010-12-24
    • 2022-10-25
    • 1970-01-01
    • 2020-06-30
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多