我们如何使用PRISM从同一模块注册多个视图?

时间:2011-03-17 18:35:57

标签: mvvm prism

我有一个有两个视图的MVVM模块。该模块用于两个独立的PRISM应用程序。

如何告诉Shell哪个View必须显示?

1 个答案:

答案 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模式。