WPF中TextBox获取焦点 ViewModel中设置

7 篇文章 0 订阅

项目场景:

初始化一个WPF页面后需要让其中一个TextBox获取焦点


问题描述

初始化一个WPF页面后需要在ViewModel中进行设置让其中一个TextBox获取焦点,但是用textBox1.Focusable = true;无效。

最后改为Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new Action(() => textBox1.Focus()));后实现预想效果

Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, new Action(() => textBox1.Focus()));

WPF,`TextBox`的`TextChanged`属性用于监听文本框内容的变化。为了绑定这个事件并执行特定的操作,通常使用数据绑定和事件委托。以下是具体的步骤: 1. **创建视图模型**(ViewModel): 在您的视图模型(ViewModel,可以添加一个字符串属性来存储文本框的内容,并定义一个委托方法来处理文本变化。例如: ```csharp public class ViewModel { public string TextBoxText { get; set; } public event EventHandler<TextChangedEventArgs> TextChanged; public void HandleTextChanged() { if (TextChanged != null) { TextChanged(this, new TextChangedEventArgs(TextBoxText)); } } } public class TextChangedEventArgs : EventArgs { public string NewText { get; set; } } ``` 2. **XAML绑定TextBox和订阅事件**: 在XAML,首先声明一个`TextBox`并绑定其`Text`属性到`ViewModel`的`TextBoxText`,然后订阅`TextChanged`事件: ```xml <TextBox x:Name="textBox"> <i:Interaction.Triggers> <i:EventTrigger EventName="TextChanged"> <local:HandleTextChangedCommand/> </i:EventTrigger> </i:Interaction.Triggers> </TextBox> <!-- 这里引入了本地自定义命令,假设它位于一个叫本地的命名空间 --> <Style TargetType="TextBox"> <Setter Property="Text" Value="{Binding TextBoxText}"/> </Style> ``` 这里的`HandleTextChangedCommand`应该是一个实例化了`ActionCommand`的绑定,它会在`TextChanged`发生时触发`ViewModel`的`HandleTextChanged`方法。 3. **实现自定义命令**: 如果需要的话,可以创建一个自定义命令(如`ActionCommand`),以便更好地控制何时执行回调函数。例如: ```csharp public static class Commands { public static readonly RoutedCommand HandleTextChangedCommand = new(); } ``` 4. **在代码-behind注册事件处理器**: 在`.xaml.cs`文件,注册`ViewModel`的`TextChanged`事件处理: ```csharp private ViewModel viewModel; public MainWindow() { InitializeComponent(); viewModel = new ViewModel(); viewModel.TextChanged += ViewModel_TextChanged; } private void ViewModel_TextChanged(object sender, TextChangedEventArgs e) { viewModel.HandleTextChanged(); } ``` 现在每次`TextBox`的文本改变,`HandleTextChanged`方法就会被调用,执行相应逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值