MVVM Focus To Textbox

Mic*_*han 10 wpf textbox mvvm

如何在TextBox不指定名称的情况下将焦点设置为a TextBox?目前我正在做以下事情

<Window FocusManager.FocusedElement="{Binding ElementName=Username}">
    <Grid>
        <TextBox Text="{Binding Username}" Name="Username" />            
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以在不指定名称的情况下执行此操作TextBox.我相信MVVM中有一个Name元素通常意味着糟糕的设计?

jbe*_*jbe 22

我相信MVVM中有一个Name元素通常意味着糟糕的设计?

不,这不对.

MVVM模式不是要从代码隐藏文件中删除所有代码.

它是关于分离关注点和提高可测试性.查看焦点处理等相关代码应保留在View的代码隐藏文件中.但是在View的代码隐藏文件中看到应用程序逻辑或数据库连接管理会很糟糕.

可以在WPF应用程序框架(WAF)项目中找到MVVM示例,其中包含代码隐藏文件中的代码而不违反MVVM模式.

  • +1**MVVM模式不是要消除代码隐藏文件中的所有代码**很好 (7认同)

小智 6

简单的方法是在UserControl_Load事件中设置焦点

        this.txtBox.Focus();
        txtBox.Focusable = true;
        Keyboard.Focus(txtBox);
Run Code Online (Sandbox Code Playgroud)

MVVM并不意味着您不能将代码放在代码隐藏文件中.事实上,不要让任何模式限制你找到最好的编码方式.


Jos*_*ant 4

我在对类似问题的回答中记录了一种“纯 MVVM”方法来执行此操作。该解决方案涉及使用附加属性和框架将接口命令从 ViewModel 传递回视图。