C# wpf更改键绑定手势上文本框的文本

C# wpf更改键绑定手势上文本框的文本,c#,wpf,key-bindings,ivalueconverter,C#,Wpf,Key Bindings,Ivalueconverter,如何使用MVVM模式解决这个问题,我正在使用Devexpress MVVM。我有许多文本框的形式 当用户按下Ctrl+B并且文本框的当前文本为空或为空时,我需要将文本框文本设置为[空白] 但如果可能的话,我正在寻找使用IValueConverter的方法 我有一个类似的班级 public class BlankText : IValueConverter { public object Convert(object value, Type targetType, obje

如何使用MVVM模式解决这个问题,我正在使用Devexpress MVVM。我有许多文本框的形式

当用户按下Ctrl+B并且文本框的当前文本为空或为空时,我需要将文本框文本设置为[空白]

但如果可能的话,我正在寻找使用IValueConverter的方法

我有一个类似的班级

public class BlankText : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (string.IsNullOrEmpty(value.ToString()))
                return "[blank]";
            else
                return value;
        }
    }
我在参考资料中有这个代码

    <UserControl.Resources>
        <c:BlankText x:Key="BlankText"/>
    </UserControl.Resources>
这是我的文本框

           <TextBox Text="{Binding District}"  >
                <TextBox.InputBindings>
                    <KeyBinding Gesture="Ctrl+B">
                    </KeyBinding>
                </TextBox.InputBindings>
            </TextBox>

但我的问题是我怎么能在键盘上调用它?我做得对吗?

为了使用键绑定执行操作,您不能使用IValueConverter。IValueConverters用于转换值,而不是执行操作。您需要定义一个实现ICommand的类,然后将该类的实例分配给KeyBinding.Command

然后创建此类的实例并将其附加到ViewModel,以便KeyBinding可以访问它:

<TextBox Text="{Binding District}">
    <TextBox.InputBindings>
        <KeyBinding Gesture="Ctrl+B" Command="{Binding MyBlankCommand}" CommandParameter="District"/>
    </TextBox.InputBindings>
</TextBox>

然而,当用户按下键盘快捷键时,将文本改为[空白]是一种奇怪的用户体验模式。我建议改为在文本框中添加一个占位符。

我已经想到了这个解决方案,但是有了这个。我需要对每个人都有一个命令textbox@mecocopy您可以为每个文本框使用单个命令实例;是什么阻止了你?那就听我指挥。我如何知道哪个绑定被传递到它?为了知道我将设置为[空白]的属性?每个文本框文本都绑定到一个属性I修改了我的帖子以使用反射,这允许这种模式工作。但是,在实例化ViewModel时,现在需要将其实例传递给命令。
<TextBox Text="{Binding District}">
    <TextBox.InputBindings>
        <KeyBinding Gesture="Ctrl+B" Command="{Binding MyBlankCommand}" CommandParameter="District"/>
    </TextBox.InputBindings>
</TextBox>