wpf - 是否可以在 Prism WPF 项目和 Prism Forms 之间使用通用视图模型(尤其是导航)?
问题描述
我正在开发一个跨平台应用程序,并在某些平台上使用 Prism Forms,在 Windows 上使用 Prism WPF。我想在两者之间使用一个通用的视图模型,但是我在视图模型派生的基类方面遇到了挑战,特别是在导航支持方面。
我看到的 Prism Forms 示例实现了 INavigationAware。Prism WPF 似乎也支持这一点。但是,我不能从同一个项目中同时引用 Prism WPF 和 Prism Forms,原因很明显,在这两个项目中实现的类型的引用不明确。
我能够抽象出一个基本的导航界面来在页面之间导航,但我不确定如何创建一个通用的 INavigationAware 实现,它可以在 Prism Forms 和 Prism WPF 项目中正常工作。
解决方案
在浏览了 Prism.Core 的源代码后,我找到了一个合适的解决方法:IActiveAware(参见下面的参考资料)
/// <summary>
/// Interface that defines if the object instance is active
/// and notifies when the activity changes.
/// </summary>
public interface IActiveAware
{
/// <summary>
/// Gets or sets a value indicating whether the object is active.
/// </summary>
/// <value><see langword="true" /> if the object is active; otherwise <see langword="false" />.</value>
bool IsActive { get; set; }
/// <summary>
/// Notifies that the value for <see cref="IsActive"/> property has changed.
/// </summary>
event EventHandler IsActiveChanged;
}
由于 INavigationAware 是需要由视图模型实现的接口,因此共享视图模型组件需要同时引用 Prism.Forms 和 Prism.WPF。这不起作用,因为它会导致对在两者中实现的 API 的模糊引用。
最初的目标是让视图模型在导航到或从导航到时接收通知。IActiveAware 解决了这个问题,并且因为它是在 Prism.Core 中实现的,所以可以从共享视图模型中使用。
我在 Prism 8 上确认该界面的工作方式与 Prism Forms 和 Prism WPF 上宣传的一样。
推荐阅读
- python - 如何在python中正确使用排序功能
- c# - 无法访问嵌套 WPF 样式的样式
- c# - C#中线程同步的单锁对象或多锁对象
- python - 我如何使用 Python 来识别导致趋势增加和减少的因素(类似于 Power BI 的 Insights 功能)
- sql-server - 在 SQL Server 中计算总数的百分比
- android - 尝试将 Firebase 与 AndroidX 一起使用会产生错误: Failed resolution of: Landroid/support/v4/util/ArrayMap;
- macos - 允许 safe.duckduckgo.com 但在 Mac 上阻止 duckduckgo.com(可能在主机文件中)?
- npm - 使用 CLI 将成员添加到 npm org
- git - 如何从 Source Git 更新 VS/Git 中的本地 Master 分支?
- user-interface - UWP MediaElement 未关闭