从MVVM和Caliburn.Micro中的代码打开UserControl

时间:2012-07-25 16:55:17

标签: c# wpf events mvvm caliburn.micro

好的,我将微软拖放应用程序嵌入到WPF应用程序中。在ViewModel中很难实现拖放功能,所以我在后面的代码中有它。但是现在我需要从后面的代码中打开一个UserControl弹出窗口。我的尝试是从后面的代码调用ViewModel中的方法来尝试发布一个新的窗口事件。不幸的是,由于未分配的IEventAggregator,我得到一个空引用。因为我使用的是Caliburn.Micro,所以进入ViewModel是一个优先事项,我想让事件发布。

总之,我如何从后面的代码中发布ViewModel中的事件(没有在IEventAggregator上获得空引用)?

代码背后:

public partial class SomeView : System.Windows.Controls.UserControl
{
    IEventAggregator events;
    _model = new SomeViewModel();
 ....

    private void ShapeDoubleClick(object sender, AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEvent e)
    {
        if (App.VisioControl.Document.Application.ActiveWindow.Selection.Count > 0)
        {
            _model.PublishEvent(events);
        }
    }

SomeViewModel:

    public void PublishEvent(IEventAggregator events)
    {
        events.Publish(new NewWindowEvent("SomeOtherViewModel"));
    }

1 个答案:

答案 0 :(得分:0)

我必须将EventAggregator放入后面的代码中并将其传递给ViewModel以启动NewWindow事件。我最终在CM中使用了IoC调用。

IEventAggregator ie = IoC.Get< IEventAggregator>();