当前位置:  开发笔记 > 编程语言 > 正文

在Prism(复合应用程序指南)中,如何将视图动态加载到TabControl中?

如何解决《在Prism(复合应用程序指南)中,如何将视图动态加载到TabControl中?》经验,为你挑选了2个好方法。

在Prism v2应用程序中,我定义了两个区域,每个区域都是tabcontrol中的一个tabitem:


    
        
        
    

在引导程序中加载了两个模块,每个模块都为每个tabitems注入一个视图:

protected override IModuleCatalog GetModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog();
    catalog.AddModule(typeof(SecondModule.SecondModule));
    catalog.AddModule(typeof(HelloWorldModule.HelloWorldModule));
    return catalog;
}

现在,当然,我想要执行我一直阅读的解耦魔法并取消注释其中一个模块,并看到它的标签项根本不显示.相反,相反,仍然有两个TabItem,一个是空的.这告诉我,我的应用程序仍然紧密地耦合数据和UI,就像旧的WinForm时代那样.

那么我需要做些什么来使这个动态化,以便UI根据加载的模块动态变化,即我可以在我的引导程序中加载10个模块/视图,TabControl中会自动出现10个TabItems?

中级答案:

如果我只是在TabControl中创建一个区域:


然后将两个控件加载到MainRegion中:

        public void Initialize()
        {
            regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.SecondView));
        }
...
        public void Initialize()
        {
            regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView));
        }

然后我得到一个带有两个标签的TabControl,每个标签都有一个视图,这就是我想要的.

但是没有定义TabItem标头.如何动态定义标头(例如,不是在XAML中,而是在View类中动态地返回)?



1> 小智..:

这也有效:

public class View : UserControl
{

    public string ViewName { get; set; }

}

然后在shell中:

        
       

    ...



2> 小智..:

尼斯.

您可以删除视图上的ViwewName属性,并将TabItem值的绑定更改为Value ="{Binding DataContext.HeaderInfo}"...其中HeaderInfo是DataContext对象的属性 - IE是Tab项的业务对象代表.这更优雅一点.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有