繁体   English   中英

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

[英]How can I bind a C# WPF TextBox to different properties depending on a condition?

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

客户具有以下属性:

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

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

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

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

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

你可以在事件的回调中做后面检查你的radiobutton ..

就像是 :

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

暂无
暂无

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

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