我有一个命令,我希望仅在某个控件具有焦点时才启用该命令。我可以使用路由命令和命令绑定(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/