在运行时PRISM MVVM上获取对象类型

时间:2016-11-04 11:01:47

标签: c# wpf mvvm prism

我正在尝试创建一个使用按需加载的模块和视图的PRISM应用程序。当我将视图和模块加载为“WhenAvailable”时,一切正常,但这不是我想要的。

    void Navigate(object obj)
    {
        if (obj != null)
        {
            PreloadView(obj as IView, "ContentRegion");
            _manager.RequestNavigate("ContentRegion", obj.ToString());
        }
    }

    private void PreloadView<T>(T obj, string regionName) where T : IView
    {
        var region = _manager.Regions[regionName];
        var viewName = obj.ToString();

        var view = region.GetView(viewName);
        if (view == null)
        {
            view = _container.Resolve<T>();
            region.Add(view, viewName);
        }
        _manager.Regions[regionName].Activate(view);
    }

这是我的代码,它是加载视图,位于MainWindowViewModel类中,它处理区域而不处理任何其他内容。如果我能以某种方式获得Navigate函数上的真实对象类型,我会工作。它总是 System.RuntimeType ,即使它在调试器中说它是 UserControl ,它实现了 IView 。我无法理解这个问题 我知道这种方法有效,因为当我明确地使用 UserControl 而不是 T 时,一切都正确加载。但我在我的应用程序中有多个视图,而且还有新的视图,所以非一般性地执行此操作有点不是一种选择。
任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:0)

用户动态关键字。它将在运行时接受该类型。