如何根据条件将 C# WPF 文本框绑定到不同的属性

本文关键字:绑定 属性 文本 何根 条件 WPF | 更新日期: 2023-09-27 18:31:09

如何告诉我的文本框根据用户选择绑定到不同的属性。 我的场景是:

客户具有以下属性:

  1. 邮寄地址和
  2. 送货地址。

编辑或创建这些地址时,有一个单选按钮用于选择要编辑的地址。 因此,当我单击"邮寄地址"单选按钮时,我想将我的文本框绑定到属性" MailAddress",但是当单击"送货地址"时,我想将绑定更改为" ShipAddress "属性。

我知道我可以有一个属性" Address ",该属性在单击单选按钮时设置,但我想直接绑定到Customer.MailAddressCustomer.ShipAddress以进行验证(邮件地址是必需的,但送货地址不是)。

如何根据条件将 C# WPF 文本框绑定到不同的属性

首先,我想说我自己不会这样做,但直接回答你的问题,以下是你如何做到这一点:

<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。它可能会导致更多的代码,但它会更干净,更容易调试。无论哪种方式,都取决于您。

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

<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}}"/>

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

像这样:

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