WPF NavigationService возвращает нулевое значение после первой навигации или посещения второй страницы - PullRequest
0 голосов
/ 03 ноября 2019

Разработка простого приложения WPF с домашней страницей и несколькими другими страницами.

Если после такой навигации перейти с моей домашней страницы, после нажатия кнопки:

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.NavigationService.Navigate(new Page1())
}

Мы переходим к Page1 просто отлично. У меня нет кнопки на странице Page 1, я просто хочу, чтобы она запустила метод, а затем перейдите на страницу 2, например:

public Page1()
{
   InitializeComponent()

   ///go do some work
   BusyWorkMethod()
}

public void BusyWorkMethod()
{
   *does some work, then finishes*
   this.NavigationService.Navigate(new Page2())
}

Проблема заключается в том, что на втором переходе требуетсяперейдите к Page2, NavigationService является нулевым.

Если, однако, я добавлю на Page1 кнопку, аналогичную HomePage, она сделает следующее:

public Page1()
{
   InitializeComponent()

   ///go do some work
   BusyWorkMethod()
}

public void BusyWorkMethod()
{
   *does some work, then finishes*
}

private void Test_Click(object sender, RoutedEventArgs e)
{
    //go to validating page
    this.NavigationService.Navigate(new Page2());
}

Это работает. Я не уверен, что там происходит.

РЕДАКТИРОВАТЬ: добавить XAML. Это MainWindow

<NavigationWindow x:Class="DataGenerationApplication.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:DataGenerationApplication"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="500" Source="HomePage.xaml" ShowsNavigationUI="False">
</NavigationWindow>

в моем примере это "Page1", здесь он называется HomePage

<Page x:Class="DataGenerationApplication.HomePage"
      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:DataGenerationApplication"
      mc:Ignorable="d" 
      d:DesignHeight="400" d:DesignWidth="500"
      Title="HomePage" KeepAlive="True">

    <Grid Margin="10,0,10,10">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="1.5*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>

        <TextBlock HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="ConnectionString" VerticalAlignment="Top" Grid.Column="0" Grid.Row="0"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Movie Database Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="1"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Movie Collection Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="2"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Amount of Movies" VerticalAlignment="Top" Grid.Column="0" Grid.Row="3"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Users Database Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="4"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Users Collection Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="5"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Amount of Users" VerticalAlignment="Top" Grid.Column="0" Grid.Row="6"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Reviews Database Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="7"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Reviews Collection Name" VerticalAlignment="Top" Grid.Column="0" Grid.Row="8"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="Amount of Reviews" VerticalAlignment="Top" Grid.Column="0" Grid.Row="9"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,40,0,0" TextWrapping="NoWrap" Text="Clear Previous Data?" VerticalAlignment="Top" Grid.Column="0" Grid.Row="10"/>
        <CheckBox Content="" HorizontalAlignment="Left" Margin="133,41,0,0" Grid.Row="10" VerticalAlignment="Top" Name="ClearDB"/>

        <TextBox Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="mongodb://localhost:27017" VerticalAlignment="Top" Background="LightGray" Width="200" Name="ConnectionString"/>
        <TextBox Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Movies" VerticalAlignment="Top" Background="LightGray" Width="200" Name="MovieDb"/>
        <TextBox Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="MovieDocs" VerticalAlignment="Top" Background="LightGray" Width="200" Name="MovieCollection"/>
        <TextBox Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="1000" VerticalAlignment="Top" Background="LightGray" Width="200" Name="MovieAmount" PreviewTextInput="NumberValidationTextBox"/>
        <TextBox Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Users" VerticalAlignment="Top" Background="LightGray" Width="200" Name="UserDb"/>
        <TextBox Grid.Column="1" Grid.Row="5" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="UserDocs" VerticalAlignment="Top" Background="LightGray" Width="200" Name="UserCollection"/>
        <TextBox Grid.Column="1" Grid.Row="6" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="100" VerticalAlignment="Top" Background="LightGray" Width="200" Name="UserAmount" PreviewTextInput="NumberValidationTextBox"/>
        <TextBox Grid.Column="1" Grid.Row="7" HorizontalAlignment="Left" Margin="20,20,0,0" TextWrapping="NoWrap" Text="Reviews" VerticalAlignment="Top" Background="LightGray" Width="200" Name="ReviewDb"/>
        <TextBox Grid.Column="1" Grid.Row="8" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="ReviewDocs" VerticalAlignment="Top" Background="LightGray" Width="200" Name="ReviewCollection"/>
        <TextBox Grid.Column="1" Grid.Row="9" HorizontalAlignment="Left" Margin="20,5,0,0" TextWrapping="NoWrap" Text="300" VerticalAlignment="Top" Background="LightGray" Width="200" Name="ReviewAmount" PreviewTextInput="NumberValidationTextBox"/>
        <Button Content="Generate Data" Grid.Column="1" HorizontalAlignment="Left" Margin="120,38,0,0" Grid.Row="10" VerticalAlignment="Top" Width="100" Background="LightGreen" Click="Button_Click"/>

    </Grid>
</Page>

и мой "Page2", названный GeneratingPage

<Page x:Class="DataGenerationApplication.GeneratingPage"
      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:DataGenerationApplication"
      mc:Ignorable="d" 
      d:DesignHeight="400" d:DesignWidth="500"
      Title="GeneratingPage" KeepAlive="True">

    <Grid>
        <TextBlock HorizontalAlignment="Left" Margin="25,0,0,0" Text="Generating..." FontSize="80" TextWrapping="Wrap" VerticalAlignment="Center" Height="122" Width="497"/>
        <Button Content="TestButton" HorizontalAlignment="Left" Margin="205,295,0,0" VerticalAlignment="Top" Width="75" Click="Test_Click"/>
    </Grid>
</Page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...