【问题标题】:DataBinding 2 properties to 1 Control将 2 个属性绑定到 1 个控件
【发布时间】:2010-02-18 19:45:45
【问题描述】:

是否可以将 2 个属性数据绑定到 1 个控件?具体来说,我在考虑电话号码。我有一个对象,其中所有属性都可以直接绑定到 1 个控件,但是对象上有一个 areacode 和 phonenumber 属性。我的用户非常喜欢使用蒙面的文本框来输入电话号码,而不是 2 个单独的。

同样,在表单加载中添加绑定并调用持久对象的 .save() 方法要容易得多,而不是在加载时填充控件并在保存时重新设置它们(也就是说,数据绑定之间存在逻辑断开表单代码中的属性和非绑定的属性)。

所以,我想知道这是否可能。

Edit> 感谢 Yoooder 解决。

我为解决这个问题而编写的代码如下所示:

public class Person : PersistentBase
{
    private string areaCode;
    private string number;

    public string AreaCode
    {
        get { return this.areaCode; }
        set { Persist("AreaCode", this.AreaCode, value); } // pseudocode
    }

    public string Number
    {
        get { return this.number; }
        set { Persist("Number", this.number, value); }
    }

    [NonPersistent]
    public string PhoneNumber
    {
        get { return string.Format("{0}{1}", this.AreaCode, this.Number)); }
        set
        {
            PhoneParts parts = SplitIntoParts(value); // uses regex etc.
            // Validate full phone number
            this.AreaCode = parts.AreaCode;
            this.Number = parts.Number;
        }
    }
}

我像往常一样绑定

textBox1.DataBindings.Add(new Binding("Text", this.person, "PhoneNumber"));

【问题讨论】:

    标签: .net winforms data-binding


    【解决方案1】:

    数据绑定允许您将数据源中的 1 个属性绑定到目标控件上的一个属性;每个控件可以有多个绑定。所以你的DataSource.Value 可以绑定到TargetControl.Text;但是您不能同时将DataSource.Value1DataSource.Value2 绑定到TargetControl.Text

    如果我正确理解了您的用例,那么您可能希望您的数据源负责将区号和电话号码合并为一个可绑定的属性。这意味着您的数据源会将这两个属性合并在一起以进行绑定,并将它们分开以进行保存。

    【讨论】:

    • 这是我没有想到的考虑因素:在 WholePhoneNumber(或类似的东西)的设置器中,我可以设置 AreaCode 和 PhoneNumber……我喜欢它。我要试一试,如果有效,我将把它标记为答案。谢谢
    【解决方案2】:

    就我的经验而言,数据绑定是在属性级别,因此一个控件可以包含多个绑定。

    对于这个特定的问题,我建议存储电话号码的两个字段可能不是最佳设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多