我有一个实现以下界面的用户控件:
public interface IView
{
object DataContext { get; set; }
}
..它是实现以下接口的相应视图模型:
public interface ICertificationViewModel
{
string NumOfCertification { get; set; }
}
我有另一个名为NavigationService的服务,它实现了以下接口:
public interface INavigationService<TView,TViewModel>
{
void ShowView<TView,TViewModel,T>(T model) where T:class;
}
我正在使用unity,我需要在调用导航服务上的ShowView方法时将新的(瞬态)视图和视图模型组合在一起。我不能将View和ViewModel注入构造函数依赖项(因为应该创建新实例),并且我不想采用服务定位器路由(即在ShowView中调用unity来解析视图和视图模型)。有没有办法可以用统一或其他方式解决这个问题?我到处搜索,我找不到明确的答案。我正在使用Prism和.NET 3.5。我还想保持这一点通用,以便可以使用NavigationService ShowView方法解析任何视图和视图模型。
你能帮忙解决一下吗?
答案 0 :(得分:1)
Prism 库提供 RegionNavigationService ,用于控制 Views 中的 Navigation 。 RegionNavigationService 实施 IRegionNavigationService ,并定义 RequestNavigate() 方法。您可以解决在指定的区域中注册的任何视图的导航(导航无效视图位于不同的区域)。
/// <summary>
/// Provides navigation for regions.
/// </summary>
public interface IRegionNavigationService : INavigateAsync
{
...
}
INavigateAsync:
/// <summary>
/// Provides methods to perform navigation.
/// </summary>
/// <remarks>
/// Convenience overloads for the methods in this interface can be found as extension methods on the
/// <see cref="NavigationAsyncExtensions"/> class.
/// </remarks>
public interface INavigateAsync
{
/// <summary>
/// Initiates navigation to the target specified by the <see cref="Uri"/>.
/// </summary>
/// <param name="target">The navigation target</param>
/// <param name="navigationCallback">The callback executed when the navigation request is completed.</param>
/// <remarks>
/// Convenience overloads for this method can be found as extension methods on the
/// <see cref="NavigationAsyncExtensions"/> class.
/// </remarks>
void RequestNavigate(Uri target, Action<NavigationResult> navigationCallback);
}
如果您在 ShowView() 方法中完成了一些自定义的前后导航工作,则可以实施 INAVigationAware < / strong>,在视图>上定义 OnNavigatedTo() 和 OnNavigatedFrom() 涉及em>或 ViewModels 。
要了解这些方法的工作原理,以下快速入门使用 OnNavigatedTo() 方法,以便在上面读取和设置任何上下文参数新导航查看:
INavigationAware 文档:
如果这没有帮助,了解 ShowView() 方法的预期行为会很有用 会的。
问候。