如何根据条件将 C# WPF 文本框绑定到不同的属性
本文关键字:绑定 属性 文本 何根 条件 WPF | 更新日期: 2023-09-27 18:31:09
如何告诉我的文本框根据用户选择绑定到不同的属性。 我的场景是:
客户具有以下属性:
- 邮寄地址和
- 送货地址。
编辑或创建这些地址时,有一个单选按钮用于选择要编辑的地址。 因此,当我单击"邮寄地址"单选按钮时,我想将我的文本框绑定到属性" MailAddress
",但是当单击"送货地址"时,我想将绑定更改为" ShipAddress
"属性。
我知道我可以有一个属性" Address
",该属性在单击单选按钮时设置,但我想直接绑定到Customer.MailAddress
或Customer.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}}"/>
您可以在事件的回调中执行后面的操作 检查您的单选按钮。
像这样:
Binding b = new Binding("ShippingAddress");
_textBox.SetBinding(TextBox.TextProperty, b);