是否可以在模块初始化中按类型注册视图,而不会导致视图被解析(实例化),直到视图请求激活。
这种情况是我们拥有依赖于外部服务的视图优先方法。我不希望在用户真正需要该视图之前初始化该服务,这将有助于提高性能,因为一些外部服务需要花费时间进行初始化。
注意:多个视图注册到同一区域(例如菜单导航样式场景)。
答案 0 :(得分:4)
有两种方法可以解决这个问题。一个文档比另一个文档更多。
使用View Injection自己接管实例化,而不是允许Region实例化您的视图(称为View Discovery)。这非常简单,但如果不知道您的解决方案,就很难确切地知道您在寻找什么。
使用IActiveAware接口。在这种情况下,您实际上允许实例化视图,但您的视图将等待区域管理器发出视图处于活动状态的通知。以下是IActiveAware界面(它非常不言自明):http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.iactiveaware_members(v=pandp.38).aspx
一个小代码示例:
public class MyView : IActiveAware
{
private bool _isActive = false;
public bool IsActive
{
get { return _isActive; }
set
{
_isActive = value;
if(value)
{
//Good idea to thread this if you can
DoSomethingExpensive();
}
}
}
}