Wpf 如何从ViewModel访问MetroWindow的ShowMessageAsync方法

Wpf 如何从ViewModel访问MetroWindow的ShowMessageAsync方法,wpf,mvvm,viewmodel,mahapps.metro,Wpf,Mvvm,Viewmodel,Mahapps.metro,我正在将MahApps.metro WPF库与MVVM一起使用。我有一个ViewModel,需要从中显示一个对话框。MetroWindow具有ShowMessageAsync。但是,从ViewModel访问它的正确方法是什么?据我所知,我需要一个视图实例,但将其传递到ViewModel中似乎不是一个好方法。使用以下方法: 在与窗口绑定的视图模型中执行操作ShowMessageAsync 现在为窗口创建一个行为,并在行为中使用以下代码 protected override void OnAttac

我正在将MahApps.metro WPF库与MVVM一起使用。我有一个ViewModel,需要从中显示一个对话框。MetroWindow具有ShowMessageAsync。但是,从ViewModel访问它的正确方法是什么?据我所知,我需要一个视图实例,但将其传递到ViewModel中似乎不是一个好方法。

使用以下方法:

  • 在与窗口绑定的
    视图模型
    中执行
    操作
    ShowMessageAsync

  • 现在为窗口创建一个行为,并在行为中使用以下代码

    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.Loaded += AssociatedObject_Loaded;
    }
    
    void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
    {
        if (this.AssociatedObject.DataContext is WindowViewModel)
        {
            WindowViewModel vm = this.AssociatedObject.DataContext as WindowViewModel;
    
            vm.ShowMessageAsync = OnShowMessageAsync;
        }
    }
    
    private void OnShowMessageAsync(T param)
    { 
             //Write your logic to call ShowMessageAsync method.
    }
    
  • 现在,通过这种方式,从
    main窗口的
    ViewModel
    ,您将能够打开另一个子窗口。

    可能重复的