如何根据用户选择告诉我的TextBox绑定到不同的属性。我的情况是:
客户拥有以下属性:
编辑或创建这些内容时,会有一个单选按钮,用于选择要编辑的地址。因此,当我单击Mailing Address单选按钮时,我想将TextBox绑定到属性“MailAddress
”,但是当单击Shipping Address时,我想将绑定更改为“ShipAddress
”属性。
我知道我可以在单击单选按钮时设置属性“Address
”,但我想直接绑定到Customer.MailAddress
或Customer.ShipAddress
进行验证(Mail地址是必需的,但船舶地址不是。)
答案 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);