我有一個視圖,它有一個單獨的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