【问题标题】:How to perform an action in Prism's "OnNavigatingTo" for any and all classes如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作
【发布时间】:2020-11-14 02:40:53
【问题描述】:

鉴于我的 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")。有没有办法可以覆盖某些东西并实现它?

【问题讨论】:

  • 如果此问题是关于 WPF 或 Xamarin 项目的,请在您的问题中添加相应的标签。
  • @thatguy,我已经更新了 - 它适用于 Xamarin

标签: c# xamarin mvvm prism


【解决方案1】:

通过以下几个步骤很容易实现

  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))

我希望这会有所帮助

【讨论】:

  • 感谢您的回复。它确实有效,但试图消除必须向每个 ViewModel 添加参数。
猜你喜欢
  • 1970-01-01
  • 2019-09-12
  • 2019-05-11
  • 2016-11-18
  • 2012-06-16
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多