当前位置:  开发笔记 > 编程语言 > 正文

TextBox.TextChanged和ICommandSource

如何解决《TextBox.TextChanged和ICommandSource》经验,为你挑选了2个好方法。

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

是否有一种更简单的方法(比继承TextBox和实现ICommandSource)将TextChanged事件连接到我的ViewModel类?



1> Samuel Jack..:

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

如果这还不够,那么我会使用Attached Behaviors解决这个问题.在Julian Dominguez的博客上,你会发现一篇关于如何在Silverlight中做类似事情的文章,它应该很容易适应WPF.

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

然后,假设您的viewmodel已分配给View的DataContext,您可以使用它:



Greg,我指的是依赖属性绑定到的ViewModel中的属性的Setter,而不是依赖属性本身的setter.

2> Nidonocu..:

使用事件绑定和命令方法可能不是正确的选择.这个命令到底会做什么?

您可能需要考虑使用数据绑定到VM中的字符串字段.这样,您可以从那里调用命令或函数,而不是完全关注UI.


....
public string WorldName
{
    get
    {
        return WorldData.Name;
    }
    set
    {
        WorldData.Name = value;
        OnPropertyChanged("WorldName");
        // CallYourCustomFunctionHere();
    }
}

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有