c# - 如何在 Prism 的 "OnNavigatingTo"中为任何和所有类执行操作

标签 c# xamarin mvvm prism

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

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") 的情况下实现此类功能在每个类(class)。有没有办法可以覆盖某些东西并实现它?

最佳答案

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

  • 创建一个 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);
     }
    }
    
  • 为您的每个 ViewModel 类继承 BaseViewModel 类
    public class AViewModel : BaseViewModel {
      //Constructor
      public AViewModel() : base(nameof(AViewModel))
      {
         //Some code
      }
    

  • //MethodA
    public void MethodA()
    {
        //Some code
    } }
    

    笔记:-

    base(nameof(AViewModel))


    我希望这个能帮上忙

    关于c# - 如何在 Prism 的 "OnNavigatingTo"中为任何和所有类执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63070048/

    相关文章:

    c# - 为每组端点使用静态 HttpClient 与不同的 HTTPClient

    设置为可聚焦后,带有 Xamarin EditText 的 Android 无法使用

    WPF:装饰 ViewModel?

    c# - 尝试将我的 Web 应用程序从 VS Enterprise 2015 update 1 发布到 azure 时出错 :

    c# - 多个操作的并行化和结果的连接

    c# - 学习有效地使用接口(interface)

    ios - Xamarin IOS 暂时更改按钮的颜色

    ios - Xamarin 中缺少 ios 选项

    c# - 在 MVVM 中绑定(bind)事件并将事件参数作为命令参数传递

    android - 当对 Room 数据库进行输入时,RecyclerView 列表项不显示