C# WPF MVVM 文本框清除而不破坏命令绑定?
C# WPF MVVM Textbox Clearing without breaking Command Bindings?
谷歌搜索告诉我,这通常是一个问题,但从未真正解决过。
我在 C# 中确实有一个 App/Prgramm,我会尽量符合 mvvm。
我确实有一个 window,其中一个 UserControl 显示不同的视图。
我的视图之一包含一个文本框,文本框的文本绑定到 VM 的属性。
我的文本框有 2 个输入绑定,用于“enter”和“return” - 都导致相同的命令。
点击“输入”后,文本框的值应该被处理,文本框应该被清除并重新聚焦……这有效……一次……
使用 String.Empty 清除文本框会破坏绑定...这可以在此处的多个帖子中找到...最解决方案是 textboxname.clear() ...
但我在视图模型中没有“文本框名称”,仅在代码隐藏中,但我所有的逻辑都在 VM 中......所以有人可以帮我解决问题,我如何在不破坏绑定的情况下清除文本框输入文本并多次按回车键 ?
我的代码
<TextBox x:Name="tb_checkinbox" Grid.Row="0" Grid.Column="1" Width="200" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding CheckInNumber}">
<TextBox.InputBindings>
<KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Return"/>
<KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Enter"/>
</TextBox.InputBindings>
</TextBox>
public CheckinVM()
{
OnCheckInEnterCommand = new RelayCommand(OnCheckInEnter, CanCheckInEnter);
}
private string _checkInNumber;
public string CheckInNumber
{
get { return _checkInNumber; }
set { SetProperty(ref _checkInNumber, value); }
}
public ICommand OnCheckInEnterCommand { get; set; }
public void OnCheckInEnter(object value)
{
CheckInNumber = String.Empty;
/// More to do
}
public bool CanCheckInEnter(object value)
{
return true;
}
作业
CheckInNumber = string.Empty;
不“清除”任何绑定。你的结论是错误的。
然而,您在 CheckInNumber 属性 的 setter 中只会得到空字符串 - 清除后。为了不仅在 TextBox 失去焦点或您重置源 属性 时获得 属性 更新,请在文本绑定上设置 UpdateSourceTrigger=PropertyChanged
:
<TextBox ... Text="{Binding CheckInNumber, UpdateSourceTrigger=PropertyChanged}">
谷歌搜索告诉我,这通常是一个问题,但从未真正解决过。 我在 C# 中确实有一个 App/Prgramm,我会尽量符合 mvvm。 我确实有一个 window,其中一个 UserControl 显示不同的视图。 我的视图之一包含一个文本框,文本框的文本绑定到 VM 的属性。 我的文本框有 2 个输入绑定,用于“enter”和“return” - 都导致相同的命令。
点击“输入”后,文本框的值应该被处理,文本框应该被清除并重新聚焦……这有效……一次…… 使用 String.Empty 清除文本框会破坏绑定...这可以在此处的多个帖子中找到...最解决方案是 textboxname.clear() ... 但我在视图模型中没有“文本框名称”,仅在代码隐藏中,但我所有的逻辑都在 VM 中......所以有人可以帮我解决问题,我如何在不破坏绑定的情况下清除文本框输入文本并多次按回车键 ?
我的代码
<TextBox x:Name="tb_checkinbox" Grid.Row="0" Grid.Column="1" Width="200" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding CheckInNumber}">
<TextBox.InputBindings>
<KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Return"/>
<KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Enter"/>
</TextBox.InputBindings>
</TextBox>
public CheckinVM()
{
OnCheckInEnterCommand = new RelayCommand(OnCheckInEnter, CanCheckInEnter);
}
private string _checkInNumber;
public string CheckInNumber
{
get { return _checkInNumber; }
set { SetProperty(ref _checkInNumber, value); }
}
public ICommand OnCheckInEnterCommand { get; set; }
public void OnCheckInEnter(object value)
{
CheckInNumber = String.Empty;
/// More to do
}
public bool CanCheckInEnter(object value)
{
return true;
}
作业
CheckInNumber = string.Empty;
不“清除”任何绑定。你的结论是错误的。
然而,您在 CheckInNumber 属性 的 setter 中只会得到空字符串 - 清除后。为了不仅在 TextBox 失去焦点或您重置源 属性 时获得 属性 更新,请在文本绑定上设置 UpdateSourceTrigger=PropertyChanged
:
<TextBox ... Text="{Binding CheckInNumber, UpdateSourceTrigger=PropertyChanged}">