如何根据条件将C#WPF TextBox绑定到不同的属性?

时间:2013-09-13 15:32:28

标签: c# wpf binding

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

客户拥有以下属性:

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

    我知道我可以在单击单选按钮时设置属性“Address”,但我想直接绑定到Customer.MailAddressCustomer.ShipAddress进行验证(Mail地址是必需的,但船舶地址不是。)

3 个答案:

答案 0 :(得分: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的属性值。它可能会产生更多代码,但它会更清晰,更容易调试。无论哪种方式,都取决于你。

答案 1 :(得分: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}}"/>

答案 2 :(得分:0)

你可以在事件的回调中做后卫检查你的无线电按钮..

类似的东西:

Binding b = new Binding("ShippingAddress");
_textBox.SetBinding(TextBox.TextProperty, b);