我有一个与这样的命令相关联的文本框:
<TextBox Text="{Binding Path=TextContent, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Command="{Binding Path=MyCommand}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
该属性TextContent
是在 ViewModel 中定义的字符串。该命令MyCommand
也在 ViewModel 中定义。ViewModel 不知道 View。
只要 TextBox 具有焦点并按下回车键,就会调用该命令。不幸的是,如果CanExecute
返回 false,则用户无法(视觉上)看到该命令未执行,因为 TextBox 中没有视觉上的变化。
我正在寻找有关如何向用户显示该命令在他按下回车后无法执行的建议。
我的想法(以及我对它们的怀疑):
CanExecute
返回时禁用 TextBoxfalse
:这不是选项,因为CanExecute
每次键入/更改字母时,返回值都会发生变化(TextBox 中的文本会影响 的结果CanExecute
)。当它第一次被禁用时,用户不能再输入它,所以它将永远保持禁用状态。显示一个消息框,说明命令未执行:记住,ViewModel 不知道 View。甚至可以从 ViewModel 打开一个消息框吗?此外,我应该在哪里调用打开消息框?不在里面
CanExecute
,因为我只想在按 enter 后获取消息框,而不是每次都CanExecute
返回false
。也许 makeCanExecute
总是返回true
并在内部进行检查Execute
:如果检查正常,则执行命令,否则,向用户显示一些消息。但是,CanExecute
完全错过了拥有的意义……
我想保留 MVVM,但是一些用于将内容重定向到 ViewModel 的代码隐藏对我来说似乎没问题。