Переход от MainView к другому View - PullRequest
0 голосов
/ 02 сентября 2011

Я новичок в WPF и использую WPF Model-View-ViewModel Toolkit 0.1, чтобы получить в свои руки WPF.

У меня довольно простой вопрос, но я не могу разобраться с ним.

Какотобразить новый вид из пункта меню на главном экране?

Так выглядит мой код:

MainView.xaml

<Menu DockPanel.Dock="Top">
   <MenuItem Header="_File">
      <MenuItem Command="{Binding NewPage}" Header="New Page" 
                                   InputGestureText="Ctrl-N" />
   </MenuItem>
</Menu>

MainViewModel.cs

private DelegateCommand newPageCommand;

    public ICommand NewPage
    {

        get
        {

            if (newPageCommand == null)
            {
                newPageCommand = new DelegateCommand(GoToNewPage);
            }
            return newPageCommand;
        }
    }


    private void GoToNewPage()
    {
      ???
    }

Что я пишу в GoToNewPage для отображения newPage.xaml?

1 Ответ

1 голос
/ 02 сентября 2011

Обычно ваше приложение полностью выполняется в ViewModels, а представления используются для того, чтобы пользователи могли дружественно взаимодействовать с ViewModels.

В вашем случае ViewModel может иметь свойство с именем CurrentPage, которое связано с ContentControl.Content в вашем представлении. Чтобы изменить страницы, команда GoToNewPage установит для свойства CurrentPage значение NewPageViewModel.

Это заставит ContentControl понять, что его привязка изменилась, и в процессе обновления привязки он поймет, что Content изменился, и ему нужно использовать новый DataTemplate, чтобы нарисовать этот контент .

<ContentControl Content="{Binding CurrentPage}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type local:HomePageViewModel}">
            <local:HomePageView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:NewPageViewModel}">
            <local:NewPageView />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>

У меня есть простой пример этого здесь , если вам интересно

...