我是WPF新手,如果取消选中复选框,我想清除textBox的值。我尝试通过数据触发器来做到这一点。
以下是代码:
<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>
我的复选框的值在My Model的“IsSelected”属性中设置。这里,如果取消选中该复选框,则文本的更新值(在这种情况下为{x:Null})不会反映在我的模型的“金额”属性中。因此,文本似乎永远不会在UI上更改。由于绑定
,“Amount”早期设置值在TextBox中再次设置感谢任何帮助。如果您需要更多信息或说明,请告知我们 感谢。
答案 0 :(得分:6)
在这种情况下,我通常更喜欢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
}
}
这样,View不对任何逻辑负责,因此根本不需要DataTrigger
<强>更新强>
代码问题是在Text
中使用绑定设置TextBox
时,它优先于您在Text属性的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
被选中时,这将清除文本,但它不会更新您的绑定(Amount
),因为基本上您的绑定仅在选择CheckBox
时才有效