【问题标题】:How to pass a specific action to a viewmodel to execute on a button press?如何将特定操作传递给视图模型以在按下按钮时执行?
【发布时间】:2016-02-18 17:54:39
【问题描述】:

我正在尝试设置这个场景。

基本前提是这样。我有一个消息窗口,带有几个文本字段和按钮,由视图模型和模型控制。在进行一些背景检查时,最初的窗口显示为带有按钮不可见的 showdialog()。

如果发生错误,我希望窗口中的文本相应更改并且按钮变为可见。我还希望这个按钮在某处执行特定操作、委托或静态。

我希望能够将此操作传递给要执行的视图模型。原因是我想将此窗口重复用于不同的屏幕和按钮操作可能会改变。

谢谢。

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案1】:

    1.在您的 ViewModel 中定义一个命令(作为具有 INotifyPropertyChanged 的​​属性)。

    1. 将您的按钮绑定到此命令:

      Command={绑定我的命令}

    其中 MyCommand=您的视图模型的属性。

    1. 如果您需要更改命令操作,只需将属性 MyCommand 设置为您当前需要的命令的实现即可。

    【讨论】:

    • 那么创建任何路由命令并将其传递给我的模型应该可以解决问题吗?
    • 实现自己的 ICommand 会更好,RoutedCommand 是合适的,但与表示层的耦合过于紧密。
    • 我在这里找到了部分答案:stackoverflow.com/questions/11060192/… 另一部分是在 ViewModel 中实现一个函数并通过 type ActionCommand.ExecuteFunc = new Action( (delegate(object o) { this.GetType().GetMethod(Model.ClickCommand).Invoke(this, null); }));我通过模型传递函数的名称。接下来我想看看我是否真的可以通过模型发送整个动作。谢谢大家的帮助。
    • 附带说明,您的ICommand 不必与INotifyPropertyChanged 一起使用。没有它也可以工作。
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2021-03-09
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多