命令MVVM(WPF) - 如何返回值?

ml_*_*ack 9 c# wpf mvvm

我现在一直在使用MVVM模式,但在现实生活中我仍遇到问题.这是另一个:我使用命令和冒泡事件在ViewModel中处理.到现在为止还挺好.但是我使用MVVM的项目实际上是一个类库.一旦我运行命令代码,我需要能够将一个对象发送回调用应用程序.建议的方法是什么?

具体来说:在我的调用应用程序中,我有一个XAML页面直接绑定到库的ViewModel,它包含一个对象"Thing1".单击按钮时,将调用ViewModel中的方法(将其称为"CopyThing1()").它复制"Thing1"以创建"Thing2".然后我需要将"Thing2"发送回调用应用程序.

谢谢!!!

Mar*_*ann 10

命令不返回值,它们会更改应用程序的状态.如果ICommands附加到ViewModels,它非常简单,因为您可以通过在执行命令时改变ViewModel来实现这一点.

使用Josh Smith出色的MVVM文章中的RelayCommand :

public class MyViewModel : INotifyPropertyChanged
{
    private readonly ICommand mutateCommand;
    private Thing thing;

    public MyViewModel()
    {
        this.mutateCommand = new RelayCommand(this.Mutate);
    }

    public ICommand MutateCommand
    {
        get { return this.mutateCommand; }
    }

    public Thing Thing
    {
        get { return this.thing; }
        set
        {
            this.thing = value;
            // raise PropertyChanged event here...
        }
    }

    private void Mutate(object parameter)
    {
        this.Thing = new Thing();
    }
}
Run Code Online (Sandbox Code Playgroud)

打电话后,myVM.MutateCommand.Execute(new object());您可以访问新值myVM.Thing.


ml_*_*ack 1

尽管关于 Commanding 的信息清晰且正确,但它无法应用于我的情况,因为需要发生的响应是在不使用 MVVM 的调用应用程序中发生的,并且它不仅仅是 UI 响应。我确实调查了 Prism,但发现它对于我目前的需要来说太复杂了。我最终引发并处理了事件,如此处所述--> WPF MVVM Correct Way to Fire Event on View From ViewModel