从另一个 ViewModel 访问 ViewModel 中的 属性

Access property in ViewModel from another ViewModel

我有带 属性 的 ViewModel 用于显示通知:

  public class NotificationViewModel : BaseViewModel
  {
    private string errorText;
    public string ErrorText
    {
      get => this.errorText;
      set
      {
        this.errorText = value;
        this.OnPropertyChanged();
      }
    }
  }

然后在 MainViewModel.cs 中,我有以下命令,在出现错误时应显示通知:

public NotificationViewModel NotificationViewModel { get; private set; }

public MainViewModel()
{

}

private async Task AddProjectToDatabase()
{
  if (!string.IsNullOrEmpty(this.ProjectNumber))
  {
    // some other code here
  }
  else
  {
    NotificationDialog view = new NotificationDialog
    {
      DataContext = new NotificationViewModel()
    };

    this.NotificationViewModel.ErrorText = "Select project number first!";
    object result = await DialogHost.Show(view, "MainDialogHost", this.ExtendedOpenedEventHandler, this.ExtendedNotificationClosingEventHandler);
  }
}

我尝试过:

public MainViewModel()
{
  this.NotificationViewModel = new NotificationViewModel();
}

但是在这种情况下,我没有显示任何文本,因为现在初始化了 NotificationViewModel 的新实例。我可能不得不以某种方式将现有实例注入 MainViewModel.cs ?我该怎么做?如果有什么遗漏的答案,请评论。

您可以将 NotificationViewModel 属性 设置为 NotificationDialogDataContext

private async Task AddProjectToDatabase()
{
  if (!string.IsNullOrEmpty(this.ProjectNumber))
  {
    // some other code here
  }
  else
  {
    NotificationDialog view = new NotificationDialog
    {
      DataContext = this.NotificationViewModel
    };

    this.NotificationViewModel.ErrorText = "Select project number first!";
    object result = await DialogHost.Show(view, "MainDialogHost", this.ExtendedOpenedEventHandler, this.ExtendedNotificationClosingEventHandler);
  }
}