如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作

Posted

技术标签:

【中文标题】如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作【英文标题】:How to perform an action in Prism's "OnNavigatingTo" for any and all classes 【发布时间】: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 【参考方案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);
     
    
    

    为你的每个 ViewModel 类继承 BaseViewModel 类

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

    //Some code
 

注意:-

基础(名称(AViewModel))

我希望这会有所帮助

【讨论】:

感谢您的回复。它确实有效,但试图消除必须向每个 ViewModel 添加参数。

以上是关于如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作的主要内容,如果未能解决你的问题,请参考以下文章

在 PRISM 4 中导航到新视图时如何传递对象

如何在 Xamarin 表单中的视图模型之间最好地传递信息 - Prism [关闭]

在 WPF 中并通过使用 Prism,如何使用 MouseButtonEventArgs 作为窗口命令的参数?

如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作

在 PRISM 4 中导航到新视图时如何改进传递对象

如何使用 Prism 自定义适配器“导航”?