WPF结合MVVM模式,可以实现界面与代码的完全分离,非常便于开发与维护,但对于某些特定需求,例如TextBox需要Focus获得光标,或者全选其中的文本,这时候就比较难了,因为VM中完全拿不到控件对象,也很难调用Focus()与SelectAll()方法,但也不是完全不可以,有一种利用委托与事件实现的方法,不知道是否有背MVVM分离思想,具体方法如下:
View.xaml:
<TextBox Name="InputBox" Text="{Binding InputStr}"/>View.xaml.cs:
public partial class MainView : UserControl
{
public MainView()
{
InitializeComponent();
this.Loaded += MainView_Loaded;
}
private void MainView_Loaded(object sender, RoutedEventArgs e)
{
InputBox.Focus();
InputBox.SelectAll();
var vm = DataContext as MainViewModel;
vm.ControlFocusEvent += View_ControlFocus;
}
private void View_ControlFocus(string controlName)
{
switch (controlName)
{
case "InputBox":
InputBox.Focus();
InputBox.SelectAll();
break;
default:
break;
}
}
}VM:
public delegate void ControlFocusHandler(string controlName);
public event ControlFocusHandler ControlFocusEvent;
public void Focus()
{
ControlFocusEvent.Invoke("InputBox");
}
本文介绍了一种在WPF结合MVVM模式下实现TextBox获取焦点及全选文本的方法。通过使用委托与事件,使得视图模型可以在不直接引用视图元素的情况下控制TextBox的行为。

5941

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



