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}">