我有一个复选框和一个文本框。当复选框取消勾选时,我希望文本框被禁用和清除,因此当用户点击保存时,一个空字符串应保存到文本框绑定的属性。然而,目前只有内容本身被删除。有没有一种方法可以改变我的代码绑定属性也会改变?我想同样的效果upon取消选中复选框,就好像用户删除了文本框内容的手。
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding Path=Data.SomeValue, Mode=TwoWay}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=SomeCheckBox, Path=IsChecked}" Value="False">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Text" Value="{Binding x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
2条答案
按热度按时间gudnpqoy1#
我认为最干净的方法是在数据级别而不是在UI中处理。显然,
CheckBox
状态影响数据,而不仅仅是视觉表示。根据您的上下文,您可以使用数据绑定或
ICommand
来触发数据源相应地更新其属性:方案一
使用数据绑定并将
CheckBox.IsChecked
绑定到数据源。另外,直接绑定
TextBox.IsEnabled
消除了DataTrigger
,以进一步简化代码:主窗口。xaml
DataSource。cs
方案二
使用命令执行数据源中的数据相关逻辑。
同样,绑定
TextBox.IsEnabled
直接消除了DataTrigger
,以进一步简化代码。该示例使用
ICommand
的RelayCommand
实现。您可以在Microsoft Docs中找到此类的源代码:继电器命令逻辑:
主窗口。xaml
DataSource。cs
j1dl9f462#
您遇到的问题是,使用
<Setter Property="Text" Value="{x:Null}" />
时,您会从ViewModel中删除与属性的绑定。再次启用
TextBox
后,另一个样式Setter
将再次将绑定设置为VM中未修改的值。财产。你能做的就是在e中设置值。一种行为:
另一种方法是使用附加属性,如果它应该在其他条件下完成。更好的方法是在viewmodel中进行,在那里你应该存储复选框的状态。