繁体   English   中英

如何将2个文本框绑定到一个属性?

[英]How to bind 2 textboxes to one property?

我有一个适当的PhoneNumber ,在UI中,我有2个文本框,一个是前缀,另一个是后缀,如何将其绑定到属性? (DataContext内部的属性)。

<TextBox Grid.Column="0" MaxLength="3" /> //Prefix
<TextBlock Grid.Column="1" Text="-" />
<TextBox Grid.Column="2" /> //Postfix

在此处输入图片说明

我认为它起作用的唯一方法是使用textbox1.Text + textbox2.Text ...后面的代码。还有更好的方法吗?

提前致谢 :)

只需在数据上下文中使用另外两个属性

未遵守或测试代码

public string PhoneNumber { get; set; }
public string Prefix
{
    get
    {
        return PhoneNumber.Substring(0, 3);
    }
    set
    {
        // replace the first three chars of PhoneNumber
        PhoneNumber = value + PhoneNumber.Substring(3);
    }
}
public string Postfix
{
    get
    {
        return PhoneNumber.Substring(3);
    }
    set
    { 
        // replace the  chars of starting from index 3 of PhoneNumber
        PhoneNumber =  PhoneNumber.Substring(0, 3) + value;
    }
}

我认为您可以为此目的使用Converter,以一种方式进行的示例如下所示:

在此我的号码是一个string 000-000000,但是您可以确定地更改它。

在XAML中:

<Window.Resources>
    <conv:PostixConverter x:Key="PostfixConv" xmlns:conv="clr-namespace:Example.Converters"/>
    <conv:PrefixConverter x:Key="PrefixConv" xmlns:conv="clr-namespace:Example.Converters"/>
</Window.Resources>
<StackPanel>     
    <TextBox  MaxLength="3" Text="{Binding Number, Converter={StaticResource PrefixConv}}"/> 
    <TextBlock  Text="-" />
    <TextBox Text="{Binding Number, Converter={StaticResource PostfixConv}}"/>
</StackPanel>

并在后面的代码中:

namespace Example.Converters
{
  public class PrefixConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return null;
        else return ((string)value).Substring(0, 3);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
  }

  public class PostixConverter : IValueConverter
  {
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        if (value == null) return null;
        else return ((string)value).Substring(4);
      }

      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        throw new NotImplementedException();
      }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM