【问题标题】:How to access ShowMessageAsync method of MetroWindow from ViewModel如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法
【发布时间】:2015-05-13 20:29:27
【问题描述】:

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

【问题讨论】:

标签: wpf mvvm viewmodel mahapps.metro


【解决方案1】:

使用以下方法:

  1. 在与窗口绑定的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 中打开另一个子窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多