WPF PRISM - 使用区域注册视图而不解析实例

时间:2010-12-20 04:37:15

标签: wpf mvvm inversion-of-control prism

是否可以在模块初始化中按类型注册视图,而不会导致视图被解析(实例化),直到视图请求激活。

这种情况是我们拥有依赖于外部服务的视图优先方法。我不希望在用户真正需要该视图之前初始化该服务,这将有助于提高性能,因为一些外部服务需要花费时间进行初始化。

注意:多个视图注册到同一区域(例如菜单导航样式场景)。

1 个答案:

答案 0 :(得分:4)

有两种方法可以解决这个问题。一个文档比另一个文档更多。

  1. 使用View Injection自己接管实例化,而不是允许Region实例化您的视图(称为View Discovery)。这非常简单,但如果不知道您的解决方案,就很难确切地知道您在寻找什么。

  2. 使用IActiveAware接口。在这种情况下,您实际上允许实例化视图,但您的视图将等待区域管理器发出视图处于活动状态的通知。以下是IActiveAware界面(它非常不言自明):http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.iactiveaware_members(v=pandp.38).aspx

  3. 一个小代码示例:

    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();
                   }
              }
    
         }
    
    }