我正在遵循WPF UI 的MV-VM模式.我想将一个命令连接到TextBox的TextChanged事件到我的ViewModel类中的命令.我可以设想完成此任务的唯一方法是继承TextBox控件,并实现ICommandSource.然后,我可以指示从TextChanged事件触发该命令.对于看起来如此简单的事情来说,这似乎太过分了.
是否有一种更简单的方法(比继承TextBox和实现ICommandSource)将TextChanged事件连接到我的ViewModel类?
首先,您肯定考虑使用PropertyChanged的UpdateSourceTrigger将双向数据绑定到您的viewmodel?那样,每次更改文本时都会调用绑定到的属性的属性设置器?
如果这还不够,那么我会使用Attached Behaviors解决这个问题.在Julian Dominguez的博客上,你会发现一篇关于如何在Silverlight中做类似事情的文章,它应该很容易适应WPF.
基本上,在静态类(称为TextBoxBehaviours)中,您可以定义一个名为(可能)类型为ICommand的TextChangedCommand的附加属性.为该属性连接OnPropertyChanged处理程序,并在处理程序中检查是否在TextBox上设置了属性; 如果是,则在文本框上的TextChanged事件中添加一个处理程序,该事件将调用该属性中指定的命令.
然后,假设您的viewmodel已分配给View的DataContext,您可以使用它:
使用事件绑定和命令方法可能不是正确的选择.这个命令到底会做什么?
您可能需要考虑使用数据绑定到VM中的字符串字段.这样,您可以从那里调用命令或函数,而不是完全关注UI.
.... public string WorldName { get { return WorldData.Name; } set { WorldData.Name = value; OnPropertyChanged("WorldName"); // CallYourCustomFunctionHere(); } }