Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mahapp ShowMessageAsync MvvM_C#_Wpf_Mvvm_Mahapps.metro - Fatal编程技术网

C# Mahapp ShowMessageAsync MvvM

C# Mahapp ShowMessageAsync MvvM,c#,wpf,mvvm,mahapps.metro,C#,Wpf,Mvvm,Mahapps.metro,我用MVVM模式创建了最简单的WPF项目。如何从我的viewModel调用ShowMessageAsync if (DisciplineText!="") { Disciplines.Add(new Discipline(){ChairID = SelectedChair.ChairID,SemesterID = SelectedSemester.SemesterID,Discipline1 = DisciplineText}); Context.SaveChanges(

我用MVVM模式创建了最简单的WPF项目。如何从我的viewModel调用
ShowMessageAsync

 if (DisciplineText!="")
 {
     Disciplines.Add(new Discipline(){ChairID = SelectedChair.ChairID,SemesterID = SelectedSemester.SemesterID,Discipline1 = DisciplineText});
     Context.SaveChanges();
 }
 else
 {
     //  ShowMessageAsync????????
 }
您需要使用:

using MahApps.Metro.Controls;
using MahApps.Metro.Controls.Dialogs;

我希望它能有所帮助:)

自从这个问题最初是通过它所称的
对话协调器
提出以来,已经有了一种处理这些问题的机制。作者对如何使用它进行了描述;如果消失,主要步骤如下:

将以下内容添加到视图的xaml中:

xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
Dialog:DialogParticipation.Register="{Binding}"
以与应用程序相关的任何方式将对话框协调器注入视图模型:

public MainWindow()
{
    InitializeComponent();
    DataContext = new MainWindowViewModel(DialogCoordinator.Instance);
}
开始显示一些对话框:

public MainWindowViewModel(IDialogCoordinator dialogCoordinator)
{
    this.dialogCoordinator = dialogCoordinator;    
}

private IDialogCoordinator dialogCoordinator;

private void ShowDialog()
{
    dialogCoordinator.ShowMessageAsync(this, "Title of dialog", "Message in dialog");
}

不过,您已经在视图模型中添加了对窗口的依赖关系。@Cedric是对的——只需在主窗口中设置消息服务。。。然后可以从viewmodel向其发送消息。当我将您的最后一行更改为wait metroWindow.ShowMessageAsync(“Title”,“Message”)时,viewmodel不应该关心
Application.Current.MainWindow
(调用对象而不是类)对我有效。
public MainWindowViewModel(IDialogCoordinator dialogCoordinator)
{
    this.dialogCoordinator = dialogCoordinator;    
}

private IDialogCoordinator dialogCoordinator;

private void ShowDialog()
{
    dialogCoordinator.ShowMessageAsync(this, "Title of dialog", "Message in dialog");
}