2016-10-08 307 views
0

之間的導航我正在寫一個只有3頁(現在)的小型WPF應用程序。我在主窗口中使用DataTemplate和ContentControl來顯示和切換我的頁面。 (請參閱下面的代碼示例)。它的工作,但我有幾個問題:頁面導航

  1. DataTemplate只使用無參數構造函數。如果我添加一個,那麼它找不到構造函數。

  2. 「註冊」是在xaml中完成的,我不能使用依賴注入將Views與ViewModels鏈接起來。

問題:

有沒有辦法改變這種狀況,而無需使用第三方工具?

如果唯一的選擇是使用工具,我應該考慮哪些工具?

<Window.Resources> 
    <DataTemplate DataType="{x:Type pageViewModels:HomePageViewModel}"> 
     <pageViews:HomePageView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type pageViewModels:GamePageViewModel}"> 
     <pageViews:GamePageView /> 
    </DataTemplate> 
</Window.Resources> 

<DockPanel> 
    <Border DockPanel.Dock="Left" BorderBrush="Black" BorderThickness="0,0,1,0"> 
     <ItemsControl ItemsSource="{Binding PageViewModels}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Button Content="{Binding Name}" 
          Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
          CommandParameter="{Binding }" 
          Margin="2,5"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 

編輯 爲了澄清,我想在我的viewsModels的構造函數注入一類,但如果我這樣做,那麼我的應用程序中的導航被打破,因爲DataTemplate中尋找的參數的構造函數。

+0

不清楚的問題。你想要達到什麼目的? – AnjumSKhan

+0

我想在我的viewModels的構造函數中注入另一個類,但我不能'因爲xaml中的聲明使用無參數的構造函數。我想找到一種方法來解決上面列出的問題1)和2)。 –

+0

視圖模型的創建應該由其他視圖模型(或進入應用程序時的應用程序初始化程序)來處理。你所有的觀點應該做的是宣佈它是如何呈現的。迄今爲止這看起來不錯。顯示更多的虛擬機代碼 - 你可能只是稍微偏離了模式,因爲這對你來說似乎是個問題:) – Dbl

回答

0

看起來好像我的問題在這個post中得到了很好的解釋。

總之,我需要實現一個ViewModelLocator模式,以解決我所有的問題。