问题:
设置输入框焦点Textbox.focus()本应该是View的事,为什么要放在ViewModel里设置?
情景假设:
登录模块中,用户输入用户名后,调用WCFRiaService异步验证用户名,如果用户存在,密码输入框自动获得焦点,否则出现指定错误信息。在此情景中,用户验证的业务逻辑应该在ViewModel里面,当业务完成且成功后需要就会涉及到设置Textbox焦点(focus)。
分析:
Textbox没有IsFocused属性,在此种情况下,可按以下思路考虑:首先加一个FocusBehavior,然后把ViewModel的属性UserNameValidated绑定到Textbox,当业务逻辑完成且成功了需要设置Textbox焦点(focus)时,用这个属性通知UI,同时用Behavior自动设置为聚焦(focus)。
实现:
1. 加一个Behavior,继承Behavior<FrameworkElement>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interactivity;
namespace TestSLApplication
{
public class PasswordboxFocusBehavior : ControlFocusBehaviorBase<PasswordBox> { }
public class TextBoxFocusBehavior : ControlFocusBehaviorBase<TextBox> { }
public class ControlFocusBehaviorBase<T> : Behavior<FrameworkElement> whe

本文探讨了为何在ViewModel中设置TextBox焦点的场景,例如在登录验证用户名后自动聚焦密码输入框。通过创建FocusBehavior并绑定ViewModel的UserNameValidated属性,实现了业务逻辑完成后触发UI焦点设置。详细实现包括Behavior的创建、ViewModel属性的添加以及XAML的绑定。
最低0.47元/天 解锁文章
1573

被折叠的 条评论
为什么被折叠?



