[英]How can I bind a C# WPF TextBox to different properties depending on a condition?
如何根据用户选择告诉我的TextBox绑定到不同的属性。 我的情况是:
客户具有以下属性:
编辑或创建这些时,有一个单选按钮,用于选择要编辑的地址。 因此,当我单击“邮件地址”单选按钮时,我想将TextBox绑定到属性“ 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}}"/>
你可以在事件的回调中做后面检查你的radiobutton ..
就像是 :
Binding b = new Binding("ShippingAddress");
_textBox.SetBinding(TextBox.TextProperty, b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.