如何在 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”中为任何和所有类执行操作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin 表单中的视图模型之间最好地传递信息 - Prism [关闭]
在 WPF 中并通过使用 Prism,如何使用 MouseButtonEventArgs 作为窗口命令的参数?