【问题标题】:How to set the focus on a TextBox in the ViewModel (WPF/MVVM)?如何在 ViewModel (WPF/MVVM) 中的 TextBox 上设置焦点?
【发布时间】:2020-10-14 12:20:57
【问题描述】:

我有一个带有 MVVM 和一些文本框的 WPF 应用程序。 在我的 ViewModel 中,我评估文本框(数据库查询)的输入并决定接下来要关注哪个文本框。如果输入不正确,我想输出一个 MessageBox 并将焦点保持在当前 TextBox 上。

我的评估是由“LostFocus”事件触发的,但我不知道如何将焦点设置在 ViewModel 中的特定 TextBox 上。

【问题讨论】:

  • 这能回答你的问题吗? Set the focus on a textbox in xaml wpf
  • 当你显示一个消息框时,它会成为焦点。所以你不能“继续关注当前的文本框”。一旦用户关闭了消息框,您就需要将焦点重新放在它上面。您可能想重新考虑使用模式对话框并在父视图中使用其他一些机制。像工具提示或不会集中注意力的东西。我通常有一个用户消息文本块,我将所有消息输出到。
  • 坦克,我不必显示 MessageBox,但我真的必须知道如何从 ViewModel 将焦点设置在 TextBox 上,这是我主要关心的问题。
  • @manu:那么视图模型如何知道要关注哪个 TextBox?为什么它完全知道任何TextBox

标签: c# wpf mvvm focus


【解决方案1】:

由于视图模型不应该引用视图,我会通过一个事件来解决这个问题。在应该发生焦点时引发的视图模型上声明一个事件。事件参数可以包含有关应该关注哪个 TextBox 的信息。

然后您需要在视图中处理事件,您可以在其中获取对 TextBox 的引用。具体如何发生取决于您的确切代码和绑定机制。如果您有视图模型优先的方法,您已经可以在视图构造函数中访问视图模型并在那里订阅事件。

如果您想避免视图中的代码隐藏,您将不得不使用标记扩展或附加属性,我可能认为这不值得。

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 2017-06-29
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多