C# 如何在自定义事件参数中传递视图模型

C# 如何在自定义事件参数中传递视图模型,c#,.net,viewmodel,C#,.net,Viewmodel,我使用Caliburn微框架。这其实并不重要。关键是,我在视图模型中发布了一个事件,其中包含要在其事件参数中显示的新视图模型。该事件在ShellViewModel(您可以将其视为根视图模型)中捕获,这实际上激活了新的视图模型 那么,如何在事件参数中传递视图模型呢?现在看起来是这样的: // where it gets published; "AnotherViewModel" is the actual class public void AMethod() { var args = n

我使用Caliburn微框架。这其实并不重要。关键是,我在视图模型中发布了一个事件,其中包含要在其事件参数中显示的新视图模型。该事件在ShellViewModel(您可以将其视为根视图模型)中捕获,这实际上激活了新的视图模型

那么,如何在事件参数中传递视图模型呢?现在看起来是这样的:

// where it gets published; "AnotherViewModel" is the actual class
public void AMethod()
{
    var args = new ViewModelChangedEventArgs { ViewModelType = typeof(AnotherViewModel) };
    PublishEvent(args);
}

// event handler
public void Handle(ViewModelChangedEventArgs message)
{  
    if (message.ViewModelType == typeof(AnotherViewModel))
    {
        // activate AnotherViewModel
    }
    if (message.ViewModelType == typeof(FooViewModel))
    {
        // activate FooViewModel
    }
}

这种方法对我来说似乎不太优雅。您有更好的想法吗?

总体解决方案非常好,您只需在事件args中传递一个元信息,这足以创建一个新的ViewModel。关于ViewModel自身的创建,这是一个标准的设计问题,可以通过实现来解决。基本上,您需要一个能够按类型创建具体ViewModel的工厂,因此处理程序代码如下所示:

public void Handle(ViewModelChangedEventArgs message)
{  
    var viewModel = viewModelFactory.Create(typeof(AnotherViewModel));
}