问题:
设置输入框焦点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<PasswordB