2016-10-08 2 views
0

私は今は3ページしかない小さなWPFアプリケーションを作成しています。メインページでDataTemplateとContentControlを使用して、自分のページを表示して切り替える。 (下記のコードサンプルを参照してください)。それは働いていますが、私はいくつか懸念しています:ページ間のナビゲーション

  1. DataTemplateは、パラメータのないコンストラクタのみを使用します。私は1つを追加する場合、それはコンストラクタを見つけることができません。

  2. 「登録」はxamlで実行されており、依存関係注入を使用してビューを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

ビューモデルの作成は、他のビューモデル(またはアプリケーションの入力時にはアプリケーション初期化子)で処理する必要があります。あなたのすべてのビューは、どのようにレンダリングされているかを宣言しているはずです。これまでのところこれは良く見えます。あなたのVMコードの詳細を表示する - これは今あなたのための問題であると思われるので、おそらくちょうどパターンからわずかです:) – Dbl

答えて

0

私の問題はこのpostで非常によく説明されているようです。

要するに、すべての懸案事項を修正するためにViewModelLocatorパターンを実装する必要があります。

関連する問題