我有一个视图,它有一个单独的TextBox
和一对Button
s。当窗口加载时,我希望TextBox
有重点。WPF MVVM加载焦点域
如果我不使用MVVM,我会在Loaded事件中调用TextBox.Focus()
。然而,我的ViewModel不知道我的视图,所以如何在不将代码放入视图的代码隐藏的情况下完成此任务?
编辑: 阅读的答案后,我决定把这个代码视图中的XAML
<DockPanel FocusManager.FocusedElement="{Binding ElementName=MessageTextBox}">
<TextBox Name="MessageTextBox" Text="{Binding Message}"/>
</DockPanel>
如果这不是初始页面的焦点其他我可能会建议乔恩·加洛韦的答案,因为它可以从控制什么ViewModel。
这是什么样的我想。每次考虑将代码添加到视图时,我都觉得有点肮脏。在这种情况下,它似乎是有道理的。 – 2009-07-24 15:41:14
我想,一旦我改变了我的MVVM理念从“无代码背后”到“最小和相关的代码背后的”我的生活变得轻松了许多。我没有听说安德森艾姆斯已经提到的附加属性,这听起来像一个很好的解决了低级趣味的代码背后给你,但不要害怕把*合法*,非逻辑的代码在UI。 – 2009-07-24 15:45:10
我很同意你的意见。我认为从视图中消除代码是有道理的。重要的是视图中的代码应该与UI相关。虚拟机中的代码包含与模型相关的状态和其他逻辑。石蕊测试是代码是否可以/应该被测试。视图中的代码不能被测试。 – 2010-10-08 14:44:10