2

如何根据用户选择告诉我的 TextBox 绑定到不同的属性。我的情况是:

客户具有以下属性:

  1. 邮寄地址和
  2. 收件地址。

编辑或创建这些时,有一个单选按钮用于选择要编辑的地址。因此,当我单击 Mailing Address 单选按钮时,我想将我的 TextBox 绑定到属性“ MailAddress”,但是当单击 Shipping Address 时,我想将绑定更改为“ ShipAddress”属性。

我知道我可以在Address单击单选按钮时设置一个属性“”,但我想直接绑定到Customer.MailAddressCustomer.ShipAddress用于验证目的(需要邮件地址,但不需要发货地址)。

4

3 回答 3

6

首先,我想说我自己不会这样做,但要直接回答您的问题,您可以这样做:

<TextBox Name="YourTextBox">
    <TextBox.Style>
        <Style>
            <Setter Property="TextBox.Text" Value="{Binding MailAddress}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=TheRadioButton}" 
                    Value="True">
                    <Setter Property="TextBox.Text" Value="{Binding ShipAddress}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

我个人会将这些控件放入UserControl可以绑定的控件中,甚至可以将控件加倍,硬编码我Binding的所有控件,然后使用Checkbox.IsChecked属性值来切换Visibility它们。它可能会导致更多的代码,但它会更干净,更容易调试。不管怎样,这取决于你。

于 2013-09-13T16:02:11.413 回答
1

我建议使用两个单独的文本框,并将它们的可见性绑定到单选框,这样您就可以分别绑定和验证这两个属性。

<Window.Resource>
    <ResourceDictionary>
    <BooleanToVisibilityConverter x:Key="BoolVisiConv"/>
    </ResourceDictionary>
</Window.Resource>
<RadioButton Name="RdBoxMailing"/> <RadioButton Name="RdBoxShipping"/>
<TextBox Text="{Binding MailAddress}" Visibility="{Binding IsChecked, ElementName="RdBoxMailing", Converter={StaticResource BoolVisiConv}}"/>
<TextBox Text="{Binding ShipAddress}" Visibility="{Binding IsChecked, ElementName="RdBoxShipping", Converter={StaticResource BoolVisiConv}}"/>
于 2013-09-13T16:19:33.667 回答
0

您可以在单选按钮的 Checked 事件回调中执行后面的操作。

就像是 :

Binding b = new Binding("ShippingAddress");
_textBox.SetBinding(TextBox.TextProperty, b);
于 2013-09-13T15:39:06.940 回答