WPF 和 MVVM : Enable a command only when a textbox has focus with implementation in ViewModel?

标签 wpf mvvm

我有一个命令,我希望仅在某个控件具有焦点时才启用该命令。我可以使用路由命令和命令绑定(bind)来做到这一点,但我想将实现保留在我的 ViewModel 中。

代码中的命令绑定(bind)和事件处理程序是唯一的方法吗?

最佳答案

要在 ViewModel 中处理此问题,您需要将具有焦点的“特定控件”的概念添加到您的 View 模型中,从而在此焦点状态更改时启用该命令。您可以通过向 View 模型添加 bool IsCertainControlFocused 属性来完成此操作.

要更新此状态,您有两个选择,要么在 View 后面的代码中处理 GotFocus 和 LostFocus 事件,然后在 View 模型上设置此 bool 属性。或者使用其中一种 MVVM 框架抽象机制。例如,MVVM Light 框架有一个 EventToCommand 行为,它允许您将事件连接到 View 模型公开的命令,该命令可以设置此属性。

http://geekswithblogs.net/lbugnion/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx

您使用哪种技术取决于没有代码隐藏对您的重要性。我个人并不虔诚地遵循这一点,只要 View Model 有正确的职责,并且是可测试的,后面的一点代码都没有坏处!

关于WPF 和 MVVM : Enable a command only when a textbox has focus with implementation in ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4560510/

相关文章:

wpf - 如何在 WPF UserControl 中创建样式?

c# - 具有水平和垂直方向的 WrapPanel

Silverlight 如何将选定的数据网格行传递给 View 模型

c# - WPF 中的多拖放——示例/示例/教程?

c# - 用于创建向导 UI 的 WPF MVVM UserControl 绑定(bind)

ios - SwiftUI - 如何将 EnvironmentObject 传递给 View 模型?

wpf - 如何扩展而不是覆盖WPF样式

.net - 错误模板绑定(bind)错误wpf

android - 在 MVVM 架构中从 ViewModel 启动 Activity 的最佳方法

c# - 从资源加载图像并应用于 Image.source