Навигация по страницам из View Model - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу реализовать навигацию по страницам из ViewModel.Как вы можете видеть в коде, в главном окне есть рамка, которая должна быть заполнена страницами.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MaxWidth = "175" ></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="1">
        <Frame Background = "Gray" NavigationUIVisibility= "Hidden" Name = "mainFrame" Margin= "0,0,5,0" >
        </Frame>
    </Grid>
</Grid >

В MainWindowViewModel я реализовал метод команды, который должен быть выполнен, нажав наКнопка «Перейти на следующую страницу».Этот метод называется «ExecuteOpenTestResultsRecoveryPage»

private void ExecuteOpenTestResultsRecoveryPage(object parameter)
{
    RecoveryPage recoveryPage = new RecoveryPage();
    MainWindow mainWindow = new MainWindow();
    mainWindow.mainFrame.NavigationService.Navigate(recoveryPage);
}

При нажатии на кнопку «Перейти к следующей странице» метод выполняется, но в кадре ничего не происходит, и я не понимаю, почему.Пожалуйста, вы можете помочь мне понять это?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы редактируете содержимое new MainWindow() mainFrame.Не ваш текущий.

(Application.Current.MainWindow as MainWindow).mainFrame.Content = recoveryPage;

попробуйте это.

0 голосов
/ 10 декабря 2018

Вы создаете экземпляр другого экземпляра главного окна.Это только в памяти.Затем вы устанавливаете содержимое его фрейма в свой пользовательский контроль.Но вы никогда не показываете это новое главное окно.

Вы можете получить ссылку на существующее главное окно, например: var theMainWindow = Application.Current.MainWindow в качестве MainWindow.Затем установите содержание кадра на этом.Это обычно считается плохой практикой.

Я рекомендую вам сначала Google ViewModel.Как это работает, вы определяете модель представления для каждой вещи, к которой вы хотите перейти.Свяжите UserControl (не страницу) с каждым, используя тип данных =.Это входит в словарь ресурсов, который вы объединяете в app.xaml.Затем используйте contentcontrol (не фрейм) в главном окне для их размещения.Предоставьте открытое свойство CurrentViewModel из модели представления основного окна и привяжите к нему содержимое вашего contentcontrol. Измените это свойство на другую модель представления, после чего оно будет шаблонизировано в связанный пользовательский контроль.

Это стандартный шаблон, который следует использоватьбыть в состоянии найти образцы довольно легко.

0 голосов
/ 10 декабря 2018

Я бы не рекомендовал открывать новое главное окно, когда вы хотите, чтобы новая страница отображалась.Лучше отправить сообщение в представление, чтобы показать конкретное другое представление.Таким образом, вы можете достичь разделения интересов.

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