如何从 viewmodel 访问用户控件上的命令
Posted
技术标签:
【中文标题】如何从 viewmodel 访问用户控件上的命令【英文标题】:How To access commands on usercontrol from viewmodel 【发布时间】:2010-12-11 02:30:40 【问题描述】:我有遗留的 windows 窗体用户控件,它公开了几个公共方法。我将此控件包装在 wpf 用户控件上,并在新的 wpf 用户控件上使用中继命令封装方法。
现在我的问题是如何使用 mvvm 模式在我的用户控件上执行来自 viewmodel 的命令,该 viewmodel 与托管新 wpf 用户控件的视图一起使用。
【问题讨论】:
【参考方案1】:使用 PRISM 事件聚合器?您可以从 ViewModel 触发一个事件,从您的 Usercontrol 订阅它。
http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample https://msdn.microsoft.com/en-us/library/ff921122.aspx
【讨论】:
【参考方案2】:我很想知道如何让它与绑定一起工作。需要将模式设置为 OneWayToSource 才能从用户控件中获取命令。棘手的部分是命令的初始化必须在用户控件的加载事件中完成。如果您尝试在构造函数内部执行此操作,您最终会得到绑定的默认初始化,该初始化可能为 null。
【讨论】:
【参考方案3】:在视图模型中你必须添加一个字段说
Public ICommand CommandOne
现在此命令将根据您的要求/条件创建一个新的 RelayCommand 对象。
现在,您可以将此“CommandOne”命令与控件表单上的任何对象说按钮绑定。
因此,无论何时单击按钮,都会创建 RelayCommand 对象并执行作为参数提供给它的操作。
希望它对你有用。
【讨论】:
我需要做的是将用户控制命令链接到视图模型命令,以便可以在视图模型中以编程方式调用它以上是关于如何从 viewmodel 访问用户控件上的命令的主要内容,如果未能解决你的问题,请参考以下文章
如何在 viewmodel 中访问 mvvm 模型中的控件?
Caliburn.Micro-如何从继承的ViewModel在WPF视图中显示多个项目:Conductor 。Collection.AllActive