DataBinding 2属性为1 Control

时间:2010-02-18 19:45:45

标签: .net winforms data-binding

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

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

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

编辑>感谢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"));

2 个答案:

答案 0 :(得分:2)

数据绑定允许您将数据源中的1个属性绑定到目标控件上的一个属性;每个控件都可以有多个绑定。因此,DataSource.Value可以绑定到TargetControl.Text;但是,您无法将DataSource.Value1DataSource.Value2绑定到TargetControl.Text

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

答案 1 :(得分:0)

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

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