关于wpf:TextBox.TextChanged

关于wpf:TextBox.TextChanged

TextBox.TextChanged & ICommandSource

我正在为WPF UI遵循M-V-VM模式。我想将一个TextBox的TextChanged事件的命令连接到ViewModel类中的命令。我可以构想完成此任务的唯一方法是从TextBox控件继承,并实现ICommandSource。然后,我可以指示要从TextChanged事件中触发该命令。对于看起来如此简单的东西来说,这似乎太多了。

有没有比将TextBox子类化并实现ICommandSource更为简便的方法来将TextChanged事件连接到我的ViewModel类?


首先,您肯定已考虑使用PropertyChanged的UpdateSourceTrigger将双向数据绑定到您的视图模型。这样,每次更改文本时都会调用绑定到的属性的属性设置器?

如果这还不够,那么我将使用"附加行为"解决此问题。在朱利安·多明格斯(Julian Dominguez)的博客中,您将找到一篇有关如何在Silverlight中执行非常相似的操作的文章,该文章应易于适应WPF。

基本上,在静态类(称为TextBoxBehaviours)中,定义一个名为(也许)ICommand类型的TextChangedCommand的附加属性。为该属性连接一个OnPropertyChanged处理程序,并在该处理程序中,检查是否在TextBox上设置了该属性;如果是,则在文本框上的TextChanged事件中添加一个处理程序,该处理程序将调用属性中指定的命令。

然后,假设您的视图模型已分配给View的DataContext,则可以使用它:

1
2
3
<TextBox
  x:Name="MyTextBox"
  TextBoxBehaviours.TextChangedCommand="{Binding ViewModelTextChangedCommand}" />

使用事件绑定和命令方法可能不是正确的选择。
该命令的作用是什么?

您可能要考虑对VM中的字符串字段使用数据绑定。这样,您可以从那里对命令或函数进行调用,而无需完全关心UI。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TextBox Text="{Binding WorldName}"/>
....
public string WorldName
{
    get
    {
        return WorldData.Name;
    }
    set
    {
        WorldData.Name = value;
        OnPropertyChanged("WorldName");
        // CallYourCustomFunctionHere();
    }
}


您不仅可以处理TextChanged事件并从那里执行命令吗?

1
2
3
4
private void _textBox_TextChanged(object sender, EventArgs e)
{
    MyCommand.Execute(null);
}

就像您说的那样,

替代方法是创建一个TextBox作为命令源,但是除非您计划在许多地方共享和利用它,否则这似乎有点过分了。


推荐阅读

    linux命令暂停下载?

    linux命令暂停下载?,系统,代码,暂停,第一,服务,管理,命令,进程,程序,接线,lin

    共享盘挂载命令linux?

    共享盘挂载命令linux?,系统,信息,服务,设备,电脑,名字,情况,网络,命令,磁盘,l

    linux管理磁盘命令?

    linux管理磁盘命令?,系统,情况,管理,设备,报告,单位,数据,信息,命令,磁盘,lin

    linux三十个基本命令?

    linux三十个基本命令?,工作,地址,系统,信息,命令,管理,目录,单位,数据,生产,l

    linux查询ip命令?

    linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

    linux命令赋予权限?

    linux命令赋予权限?,系统,密码,档案,权限,数字,地址,用户,文件,命令,目录,详

    linux命令行重命名?

    linux命令行重命名?,图片,名字,名称,软件,代码,文件,命令,文件名,批量,方面,L

    linux创建命令简写?

    linux创建命令简写?,系统,数据,命令,文件,环境,档案,位置,文件夹,目录,终端,L

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    linux命令10分类?

    linux命令10分类?,工作,系统,信息,管理,命令,地址,目录,数据,位置,单位,常用

    linux命令创建pkg?

    linux命令创建pkg?,名称,文件,命令,系统,首次,数据,位置,不了,时间,名字,linu

    linux防火墙的命令?

    linux防火墙的命令?,系统,软件,服务,状态,防火墙,命令,代码,密码,公共,管理,l

    linux命令cp中的r?

    linux命令cp中的r?,系统,文件,命令,适当,信息,时间,目录,源文件,文件夹,选项

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux命令行3中文?

    linux命令行3中文?,工作,地址,系统,信息,标准,命令,目录,网上,功能,内核,linu

    linux设置壁纸的命令?

    linux设置壁纸的命令?,图片,系统,电脑,照片,位置,终端,颜色,字体,单击,壁纸,

    linux添加端口命令?

    linux添加端口命令?,服务,系统,工具,端口,位置,情况,软件,对外开放,命令,文

    linux克隆代码命令?

    linux克隆代码命令?,系统,代码,文件,命令,目录,源文件,文件夹,路径,目标,表

    linux怎么调用命令行?

    linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,l

    linux还原系统命令?

    linux还原系统命令?,系统,数据,设备,工具,电脑,一致,命令,硬盘,文件,备份,lin