首页 > 解决方案 > 如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作

问题描述

鉴于我的 Prism 应用程序项目中有大约 100 个类,因此其他开发人员很难调试一个项目。我正在寻找一种在用户导航到任何页面时显示敬酒的方法。此 toast 消息将告诉用户当前视图的相应视图模型页面标题。

public class AViewModel 
{
   public override void OnNavigatingTo(INavigationParameters parameters)
   {
      Toast("AViewModel")
   }
}

public class BViewModel 
{
    public override void OnNavigatingTo(INavigationParameters parameters)
    {
        Toast("BViewModel")
    }
}

public class CViewModel 
{
   public override void OnNavigatingTo(INavigationParameters parameters)
   {
      Toast("CViewModel")
   }
}

public class DViewModel 
{
   public override void OnNavigatingTo(INavigationParameters parameters)
   {
      Toast("DViewModel")
   }
}

我希望实现这样的功能,而不是实际包括Toast("ViewModelName")在每个类中。有没有办法可以覆盖某些东西并实现它?

标签: c#xamarinmvvmprism

解决方案


只需以下几个步骤即可轻松实现

  1. 创建一个 BaseViewModel 类

    public class BaseViewModel : INavigationAware
     {
         string PageName { get; set; }
         public BaseViewModel(string pageName)
         {
             PageName = pageName;
         }
         public virtual void OnNavigatedFrom(INavigationParameters parameters)
         {
           //Methods gets called when current active page navigated to some other page
         }
    
     public virtual void OnNavigatedTo(INavigationParameters parameters)
     {
       //Methods gets called when current page is activated
    
       //System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame(1);
       //Toast(stackFrame.GetMethod().DeclaringType.Name);
    
       Toast(PageName);
     }
    }
    
  2. 为您的每个 ViewModel 类继承 BaseViewModel 类

    public class AViewModel : BaseViewModel {
      //Constructor
      public AViewModel() : base(nameof(AViewModel))
      {
         //Some code
      }
    
//MethodA
public void MethodA()
{
    //Some code
} }

笔记:-

基地(名称(AViewModel))

我希望这个能帮上忙


推荐阅读