我有一个有两个视图的MVVM模块。该模块用于两个独立的PRISM应用程序。
如何告诉Shell哪个View必须显示?
答案 0 :(得分:2)
shell不知道要显示的视图。 shell只提供一个区域:
<Window x:Class="PCRS.Client.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Regions="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism" >
<Grid>
<ContentControl Regions:RegionManager.RegionName="MainRegion"/>
</Grid>
</Window>
模块必须将视图注册到应该显示的区域:
[Module(ModuleName="MyModule")]
public class MyModule : IModule
{
public void Initialize( )
{
RegionManager.RegisterViewWithRegion( "MainRegion", typeof( MyView ) );
}
}
区域经理现在负责将视图放入指定区域。
如果您在不同的应用程序中使用了两个视图,则可以将MyView1注册到名为MyView1Region的区域,将MyView2注册到名为MyView2Region的区域:
RegionManager.RegisterViewWithRegion( "MyView1Region", typeof( MyView1 ) );
RegionManager.RegisterViewWithRegion( "MyView2Region", typeof( MyView2 ) );
现在您可以通过在shell中命名要使用哪个视图的区域来决定。
但我认为你不应该使用PRISM,或者你应该重新考虑你的设计。 PRISM用于解耦应用程序模块,并且没有唯一知道整个应用程序组合的Shell。使用PRISM可以让模块决定在用户界面中将视图输出到何处。至于你想让这个决定权仍然在shell中,你不需要PRISM。您更有可能使用标准MVVM模式。