如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法

How to access ShowMessageAsync method of MetroWindow from ViewModel

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

使用以下方法:

  1. 在您要与 window 绑定的 ViewModel 中取一个 Action<T> ShowMessageAsync

  2. 现在为 Window 创建行为并在行为中使用以下代码

    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.
    }
    

现在这样,您可以从 MainWindowViewModel 打开另一个 child window。