3

私はWPFを初めて使用しますが、MVVM Light Toolkitを使用しているWPFアプリケーションで複数の画面間を移動する場合に、ベストプラクティスとして人々が推奨するものを確認したいと思います。WPFを初めて使用する場合、適切な用語が「ビューの切り替え」、「ページのナビゲート」、「ウィンドウの変更」などであるかどうかわからないため、用語が正しくない場合は失礼します(これらの用語の説明はWPFをいただければ幸いです)。

私がやりたいことを明確にするために:ユーザーが前後に移動できるはずの3つのフルスクリーンページ/ビューを持つアプリケーションがあります。これらのビューが同時に表示されることはないため、タブコントロールのタブと最も簡単に比較できます。ただし、タブコントロールに通常付属しているタブストリップは必要ありません。代わりに、プログラムでページ/ビューを切り替えたいと思います。

次のスタックオーバーフローの回答で、いくつかの異なるアプローチを見てきました。

  1. https://stackoverflow.com/a/6114865/1081879
  2. MVVM Light for WPFでウィンドウをナビゲートする方法は?

だから本当に私は上記のアプローチのどれが私が向かうべき方向であるか疑問に思っていますか?私はすでに最初の答えを実際に実装しましたが、これを行うことがデータテンプレートの「悪用」/「ハッキング」なのか、それともフレームワークの使用方法なのかはわかりません。

最後に、他のツールキットがこの機能をすぐに提供する場合、MVVMLightは私が使用できる最も適したツールキットではない可能性があります。誰かがこの概念に光を当て、おそらくより適したツールキットをお勧めできますか?

ありがとう、

4

2 に答える 2

1

私が質問で本当に探していたのは、私がリストした2つのアプローチのうちの1つが実際に一般的に使用され、堅実なアプローチであることを示す参照でした.

私はついにこれに出くわしました: http://msdn.microsoft.com/en-us/library/gg405484%28v=PandP.40%29.aspx

これは、ビュー モデルにデータ テンプレートを使用する最初の方法です。

于 2012-10-19T20:57:01.520 に答える
1

ナビゲーションの簡単で​​汚い例 (これはここに書かれており、VS ではないため、スペルが間違っている場合は修正を適用してください):

ビューの階層的な説明を作成しましょう:

  public abstract Class ViewModelBase : INotifyPropertyChanged{} 
  public abstract Class ViewModelNavigationBase : ViewModelBase {} 
  public Class ViewModel1 : ViewModelNavigationBase {}
  public Class ViewModel2 : ViewModelNavigationBase {}
  public Class ViewModel3 : ViewModelNavigationBase {}

  public Class MainViewModel : ViewModelBase 
  {
      private ViewModelNavigationBase  currentViewModel; 
      public ViewModelNavigationBase  CurrentViewModel 
      {
         get{return currentViewModel;}
         set
         {
            currentViewModel = value;
            OnPropertyChanged("CurrentViewModel");                
         }
      }          

      private const int numberOfPages = 3 ;
      private int index;
      private ViewModelNavigationBase[numberOfPages] pages;
      ....
      ... OnNavigateCommand()
      {
          index++;
          index = index % numberOfPages;
          CurrentViewModel = pages[index];
      }

 }

資力 :

     <local:MainViewModel x:Key="MainVm" /> 

     <DataTemplate TargetType={x:Type local:ViewModel1}>
         <local:View1 />
     </DataTemplate>

     <DataTemplate TargetType={x:Type local:ViewModel2}>
         <local:View2 />
     </DataTemplate>

     <DataTemplate TargetType={x:Type local:ViewModel3}>
         <local:View3 />
     </DataTemplate>

xaml:

 <Window x:Name="MainWindow" 
         DataContext={StaticResource MainVm}>
       <StackPanel>
           <ContentControl Content={Binding CurrentViewModel} />
           <Button Content="Navigate" Command="{Binding NavigateCommand}"/>
       </StackPanel>       
 </Window>     
于 2012-10-12T20:45:48.343 に答える