RegionManager.RequestNavigate Prism не работает в WPF - PullRequest
0 голосов
/ 02 апреля 2019

Я пишу небольшое приложение WPF и использую Prism 7.1.Кажется, что все работает, но только _regionManager.RequestNavigate() не работает.Когда я нажимаю кнопку, которая связывается с DelegateCommand, вызывается _regionManager.RequestNavigate(), но ничего не происходит.Это изображение, когда я использую перегрузку RequestNavigate() с параметром navigationCallback, NavigationService равно нулю:

enter image description here

_regionManager назначается из конструкторов.Это происходит не только в одном месте, все звонки на _requestManager.RequestNavigate() все еще такие.

Вот как я настраиваюсь:

App.xaml.cs:

public partial class App: PrismApplication 
{
    protected override void OnStartup (StartupEventArgs e) 
    {
    base.OnStartup (e);
    }

    protected override void RegisterTypes (IContainerRegistry containerRegistry) 
    {
        containerRegistry.RegisterForNavigation<DangNhapView> ();

        containerRegistry.RegisterSingleton<IBusyMonitor, CompositeMainComponentsBusyMonitor> ();
        containerRegistry.RegisterSingleton<INetRequester, HttpNetService> ();
        containerRegistry.RegisterSingleton<IInternetConnectionChecker, MNBConnectionChecker> ();

    }

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

    protected override void ConfigureModuleCatalog (IModuleCatalog moduleCatalog) {

    }
}

MainWindow.xaml:

<Window x:Class="XemDiemSinhVienMain.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:local="clr-namespace:XemDiemSinhVienMain.Views"
        mc:Ignorable="d"
        Title="Xem điểm sinh viên" Height="520" Width="940"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        xmlns:uc="clr-namespace:XemDiemSinhVien.Infrastructures.UserControls;assembly=XemDiemSinhVien.Infrastructures"
        xmlns:constants="clr-namespace:XemDiemSinhVien.Infrastructures.Constants;assembly=XemDiemSinhVien.Infrastructures"
        xmlns:xemDiemSinhVienMain="clr-namespace:XemDiemSinhVienMain"
        Icon="../app_icon.ico">
    <WindowChrome.WindowChrome>
        <WindowChrome GlassFrameThickness="1"
                      CornerRadius="0"
                      CaptionHeight="0"
                      UseAeroCaptionButtons="False"
                      ResizeBorderThickness="5"/>
    </WindowChrome.WindowChrome>
    <!-- /2010019/okno-za-predelami-ekrana-pri-razvertyvanii-s-ispolzovaniem-biblioteki-integratsii-obolochki-wpf -->
    <Window.Template>
        <ControlTemplate TargetType="{x:Type local:MainWindow}">
            <Border BorderBrush="Green">
                <Border.Style>
                    <Style TargetType="{x:Type Border}">
                        <Setter Property="BorderThickness" Value="0"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}, Path=WindowState}" Value="Maximized">
                                <Setter Property="BorderThickness" Value="8"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
                <!-- Window's content -->
                <Grid Background="White"> 
                    <Grid.RowDefinitions>
                        <RowDefinition Height="32"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>

                    <ContentControl Grid.Row="1"
                                    prism:RegionManager.RegionName="{x:Static constants:RegionNames.MainContentRegion}"/>
                    <Button Content="Switch to NavigationTestView"
                            Command="{Binding SwitchToNavigationTestViewCommand}"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Top"
                            Margin="10"
                            Grid.Row="1"/>
                    <uc:WindowTitleBar Grid.Row="0"
                                       MinimizeClick="WindowTitleBar_OnMinimizeClick"
                                       CloseClick="WindowTitleBar_OnCloseClick"
                                       MouseLeftButtonDown="WindowTitleBar_OnMouseLeftButtonDown"/>
                </Grid>
            </Border>
        </ControlTemplate>
    </Window.Template>
</Window>

MainWindowViewModel:

public class MainWindowViewModel : BindableBase 
{
    private IRegionManager _regionManager;
    public DelegateCommand SwitchToNavigationTestViewCommand { get; private set; }

    public MainWindowViewModel (IRegionManager regionManager) {
        _regionManager = regionManager;

        SwitchToNavigationTestViewCommand = new DelegateCommand (() => {
            _regionManager.RequestNavigate (RegionNames.MainContentRegion, "DangNhapView");
        });
    }
}

Так как я могу решить эту проблему?Спасибо, что прочитали мой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...