2011-09-02 235 views
0

我是WPF的新手,我使用WPF Model-View-ViewModel Toolkit 0.1來掌握WPF。從MainView導航到另一個視圖

我有一個相當簡單的問題,但我無法得到我的頭。

如何顯示mainview上菜單項的新視圖?

這是我的代碼看起來像:

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?

+0

什麼是頁,一個對話框,窗口或像一個TabItem的東西嗎? – thumbmunkeys

+0

它是一個新的wpfPage。 newpage.xaml – Asdfg

回答

1

通常,您的應用程序完全在ViewModels中運行,View用於允許用戶以友好的方式與ViewModel進行交互。

就你而言,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> 

我有這個here的一個簡單的例子,如果你有興趣

+0

它說'本地'是一個未聲明的命名空間。任何想法我在這裏失蹤? – Asdfg

+0

@asdfg您需要在代碼頂部定義'local'命名空間。顯示的示例代碼假設'Views'和'ViewModels'在同一個命名空間中,並且該命名空間通過'xmlns:local =「clr-namespace:MyNamespace」映射到'local'' – Rachel

+0

其中一個,使用Resharper的很多原因是,如果您在不提供其(XML)名稱空間的情況下在XAML中引用某個類型,它將爲您提供一個名稱空間,甚至可以創建一個新的名稱空間聲明和前綴(如果需要的話)。 –

相關問題