PRISM + Silverlight:模块和视图发现

时间:2012-08-28 13:57:40

标签: c# silverlight prism

我们正在使用PRISM将大型应用程序划分为模块,每个模块都代表我们公司的一个部门:

HumanResources
Accounting
InformationSystems
(...)

每个模块都有几个视图。例如,Accounting.Module可能包含:

BusinessIntelligenceView(/Model)
ReportingView(/Model)

我希望发生的是应用程序加载模块(我将手动输入ModuleCatalog)。然后,我希望ShellView自动显示可用视图列表,用户可以使用它来选择要注入主区域的视图。

这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不是专家,我认为它不是内置在棱镜中,但这绝对是可能的:)

为您提供的一些提示...请善待,我没有使用IDE编写任何代码行:)

首先,您可以创建一个视图(和一个视图模型)来显示可用视图列表。那些“可用视图”可以由定义视图信息的类表示。

类似的东西:

public interface IAvailableView
{
    string ViewName { get; }
    string ModuleName { get; }  
}

其次,为了能够显示所有可用的视图,需要在目录中“模块化”时加载模块。然后在应用程序初始化时触发它们。

在您的模块中,您现在应该在特定名称下注册您的视图,并且可以在依赖项容器中注册它所公开的所有可用视图。

public virtual void Initialize()
{  
    RegisterView<IView, AnyView>("AnyView");
    Register<IAvailableView>(new AvailableView("AnyView", "MyModuleName"));
}

加载完所有模块后,您的视图模型控件应该能够解析所有这些IAvailableViews。

现在,您需要做的就是将这些可用视图绑定到控件上,并在用户单击某个项目后在RegionManager中注册correspoding视图...

var view = GetInstance<IView>(selectedAvailableView.ViewName);
RegionManager.RegisterViewWithRegion("whateverRegion", () => view);

希望有所帮助:)