wpf - 如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法

标签 wpf mvvm viewmodel mahapps.metro

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

最佳答案

使用以下方法:

  • 采取Action<T> ShowMessageAsync在您的 ViewModel您正在与窗口绑定(bind)。
  • 现在为 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.
    }
    

  • 现在以这种方式,从ViewModel您的MainWindow您将能够打开另一个子窗口。

    关于wpf - 如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224624/

    相关文章:

    c# - MVC- View 未将模型列表值传递回 Controller

    silverlight - Silverlight 中的 MVVM 数据持久性

    c# - WPF MVVM中用于数据库事务的任务,BackgroundWorkers或新线程?

    binding - ExtJs 5 网格存储/ View 模型绑定(bind) : Cannot modify ext-empty-store

    asp.net-mvc - MVC ASP.NET 没有为此对象定义无参数构造函数

    wpf - 在 WPF 中在行顶部绘制文本

    c# - UI 在更新 TreeView 控件中的 ObservableCollection<T> 时速度较慢

    c# - Windows 10 上的 WPF 应用程序内存泄漏

    c# - 如何使用计时器在 10 秒后关闭(自动隐藏)WPF 窗口

    c# - 编辑 View 中不可编辑的 ViewModel 属性