我是 WPF 新手,如果未选中复选框,我想清除文本框的值。我尝试通过数据触发器来做到这一点。
下面是代码:
<TextBox Text="{Binding Path=Amount,Mode=TwoWay}">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
<Setter Property="TextBox.Text" Value="{x:Null}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
我的复选框的值在我的模型的“IsSelected”属性中设置。在这里,如果未选中该复选框,则文本的更新值(在本例中为 {x:Null})不会反映在我的模型的“金额”属性中。因此,用户界面上的文本似乎永远不会改变。由于绑定,之前设置的“金额”值在文本框中再次设置
任何帮助表示赞赏。如果您需要更多信息或澄清,请告诉我
谢谢。
在这种情况下,我通常更喜欢 ViewModel / Model 执行功能的“清晰”部分,
因此,在你的情况下,我通常会这样做:
public bool IsSelected {
get {
return _isSelected;
}
private set {
if (value == _isSelected)
return;
RaisePropertyChanging(() => IsSelected);
_isSelected = value;
RaisePropertyChanged(() => IsSelected);
if (_isSelected == false)
Amount = string.Empty
}
}
这样视图就不负责任何逻辑,因此不需要DataTrigger
at all
Update:
您的代码的问题是当您设置Text
与绑定在TextBox
它优先于您在中设置的值Style
对于文本属性。您可以使用以下方法进行检查:
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text"
Value="{Binding Path=Amount,
Mode=TwoWay}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}"
Value="false">
<Setter Property="Text"
Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
现在,当CheckBox
已检查,但它不会更新您的 Binding(Amount
)因为本质上你的绑定只有在CheckBox
被选中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)