【问题标题】:How to give focus to and select text in a TextBox from ViewModel如何从 ViewModel 中聚焦并选择 TextBox 中的文本
【发布时间】:2010-10-30 04:07:11
【问题描述】:

我正在一个简单的 WPF 应用程序的上下文中试验 MVVM。我有一个附加到按钮的命令。如果 TextBox 中的文本“不正确”,我希望 TextBox 获得焦点并选择它的所有内容。似乎做到这一点的唯一方法是通过从我的 ViewModel 中的 Command 直接调用 View,或者设置 ViewModel 触发和 View 侦听的某种 Event。从那里,视图可以直接调用相关的 TextBox。

我试图保持 MVVM 的解耦特性,但似乎我无法在 XAML 中以声明方式或直接在 ViewModel 中的代码中获得这种行为,而无需至少间接与 View 对话(无论是接口或事件)。我还必须在 ViewModel 中保留对 View 的引用。

这里什么被认为是“最佳实践”,以及在“真实”MVVM 应用程序中视图与视图模型的解耦程度如何?

【问题讨论】:

标签: wpf mvvm textbox focus


【解决方案1】:

它是直接与 UI 控件相关联的代码,所以我认为在这种情况下,View 的代码隐藏是它所属的地方。您可能想要设置一个事件或类似的东西。这样,它仍然像以前一样解耦 - 无论如何,视图都知道视图模型,您只需在代码隐藏中添加几行代码。

【讨论】:

  • 我同意。由于问题实际上是 UI 中的视觉问题,因此它似乎应该在视图中。对我来说,Xaml IS 代码,真的很难阅读......视图中的一些代码可以选择一些文本,隐藏在一些可以模拟的界面后面,或者与尝试装配依赖属性相比,某些事件似乎很好。在 ViewModel 中拥有 focus 和 selectalltext 属性似乎是倒退的,因为这些东西根本没有给出“模型视图”。太多的箍要通过和更多的混乱wrt 责任分离。
【解决方案2】:

我也遇到了同样的问题,我做了一个自定义的文本框,并从这个控件公开依赖属性。

像焦点一样,选择所有文本并将这些属性绑定到视图模型。

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2011-05-08
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多