微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Prism WPF项目和Prism Forms尤其是在导航之间是否可以使用公共视图模型?

如何解决在Prism WPF项目和Prism Forms尤其是在导航之间是否可以使用公共视图模型?

我正在开发一个跨平台应用程序,并在某些平台上使用Prism Forms,在Windows上使用Prism WPF。我想在两者之间使用一个通用的视图模型,但是我在视图模型派生的基类(尤其是导航支持)方面遇到了挑战。

我为Prism Forms看到的示例实现了INavigationAware。看来Prism WPF也支持功能。但是,由于明显的原因,我无法同时引用同一项目中的Prism WPF和Prism Forms。

我能够抽象出基本的导航界面,以便在页面之间进行导航,但是我不确定如何创建可以在Prism Forms和Prism WPF项目中正常工作的INavigationAware的通用实现。

解决方法

浏览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上宣传。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。