簡體   English   中英

在應用程序啟動時加載區域

[英]Load Region On Application Startup

我很難獲得對“區域導航”在Prism中如何工作的有效理解。 我正在嘗試創建一個基於MVVM的應用程序,該應用程序可加載主窗口並顯示由登錄表單生成的視圖。 提交登錄表單后,我想導航到新的UserControl 我想知道如果不使用模塊也是可行的,但是對於當前的實現,它是模塊化的。

使用此當前代碼,將顯示帶有按鈕的菜單欄,但不會顯示“ Login視圖。

主模塊

App.xaml.cs

protected override Window CreateShell()
        {
           return Container.Resolve<MainWindow>();
        }

protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }

protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<LoginModule.ModuleLoginModule>();
        }

MainWindow.xaml:

<Window x:Class="PrismMVVM.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        xmlns:local="clr-namespace:PrismMVVM"
        mc:Ignorable="d"

        Title="PrismMVVM" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="10*"/>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0">
            <Button Content="Code is Poetry" HorizontalAlignment="Left" Width="Auto"/>
        </DockPanel>
        <ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion">
        </ContentControl>
    </Grid>
</Window>

MainWindowViewModel.cs

namespace PrismMVVM.ViewModels 
{
    class MainWindowViewModel : BindableBase
    {
        public IRegionManager _regionManager;
        public MainWindowViewModel(IRegionManager regionManager)
        {
            _regionManager = regionManager;
            regionManager.RequestNavigate("LoginRegion", "Login");
        }
    }
}

登錄模塊

ModuleLoginModule.cs:

namespace LoginModule 
{
    public class ModuleLoginModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            var regionManager = containerProvider.Resolve<IRegionManager>();
            regionManager.RegisterViewWithRegion("LoginRegion", typeof(Login));
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<Login>();
        }
    }
}

Login.xaml:

<UserControl x:Class="LoginModule.Views.Login"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:LoginModule.Views"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid Background="White" prism:RegionManager.RegionName="LoginRegion">
        <StackPanel Panel.ZIndex="1" Margin="150">
            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center">Text</TextBox>
            <PasswordBox HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <Button Background="LightBlue" Content="Login" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </StackPanel>

        <Rectangle Panel.ZIndex="0" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="LightGray" Height="300" Width="400" />
    </Grid>
</UserControl>

我想知道如果不使用模塊也是可行的

當然可以。 模塊是完全可選的,如果願意,您可以從bootstrapper / PrismApplication進行所有注冊。

像這樣的東西沒有錯:

public class MyApplication : PrismApplication
{
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<Login>();
    }
}

internal class MainWindowViewModel
{
    public MainWindowViewModel( IRegionManager regionManager )
    {
        regionManager.RequestNavigate( "ContentRegion", "Login" );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM