0

私は次のレイアウトでアプリケーションを開発しています。MVVMの知識がなく、スケジュールが厳しいです。右側の赤い領域はContentControlです。左側の領域はナビゲーションのサイドバーになります

ここに画像の説明を入力してください

私の質問は

  1. このアプローチに従う必要があり ますhttp://channs.blogspot.com/2010/09/wpf-navigation.htmlまたは
  2. MVVMライト/プリズムを使用する必要がありますか
  3. WPFページを使用する必要がありますか?

私は現在、オプション1に傾倒しています。それに賛否両論はありますか?どのオプションをお勧めしますか?私のアプリケーションには常に1人の開発者、つまりMeしかなく、約30の画面が含まれます。

4

4 に答える 4

2

あなたはタイトなスケジュールで MVVM (または Prism?) の知識がないので、オプション 3 と 1 を使用する方がはるかに良いでしょう。 MVVM とプリズム。MVVM/Prism の世界では、当然のことと考えられている特定のことが、はるかに困難になります。

そうは言っても、私は MVVM/Prism の大きな支持者であり、特にあなたの規模のプロジェクトでは、余分な努力をする価値があると感じています。ただし、時間に追われているので、気にせず、コード ビハインドを実行してください。

于 2012-10-17T12:07:46.687 に答える
1

Prism を学ぶには時間がかかります。締め切りが迫っている場合は、知っていることだけを使用する必要があると思います。Prism の本を読む時間がある場合は、特にナビゲーションのセクションが役立ちます。

于 2012-10-18T06:30:21.383 に答える
1

PRISM を使用しないでください。これは、このような複雑ではないアプリにとってやり過ぎです。に精通している場合はDataBinding、MVVM がなくても時間を大幅に節約できます。急いでいるので、既に知っていることで安心して MVVM の学習を開始する必要があると思います。
幸運を

于 2012-10-18T07:16:48.197 に答える
0

mvvm はそれほど難しくありません。あなたの場合、最初にメインビューモデルが必要です。

public class MainViewModel
{
   private ICollectionView _myView {get;set;}
   public ObservableCollection<MyModulWrapper> MyModules{get;set;}
   public MyModulWrapper SelectedModul {get;set;}

    public MainViewModel()
    {
       this.MyModules = new ObservableCollection<MyModulWrapper>();
       //i use icollectionview because i often need sorting or filtering
       this._myView = = CollectionViewSource.GetDefaultView(this.MyModules);
       this._myView .CurrentChanged += (s, e) => { this.SelectedModul = this._myView .CurrentItem as MyModulWrapper; };
    }
}

トップ画面に表示したいすべてのモジュール(ビューモデル)をコレクションに入力する必要があります(何らかの方法で-アプリにmefを使用しますが、ハードコードしても問題ありません)。MyModulWrapper には、モジュールのビューモデルとナビゲーション用の素敵な表示名が含まれているだけです。

public class MyModulWrapper
{
   public string Displayname {get;set;}
   public object Modul {get;set;}//instead of object you can take an interface or base class or whatever
}

これで、メインビューを実行できるようになりました:) MainWindowのデータコンテキストをMainViewModelに設定するだけです。

メインウィンドウ.xaml

 <Window.Resources>
   <!--for each viewmodel you wanna show create a datatemplate. so wpf knows how to render your viewmodel-->
   <DataTemplate DataType={x:Type local:MyViewmodel4FirstButton>
     <local:MyFirstButtonView />
   </DataTemplate>
 </Window.Resources>

 <!-- for navigation -->
 <ListBox ItemsSource="{Binding MyModules}" 
          SelectedItem="{Binding SelectedModul , Mode=OneWay}"
          IsSynchronizedWithCurrentItem="true">
   <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Displayname}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
  </ListBox>

  <!-- all you need to show your selected modul - if you have a DATATEMPLATEs!! -->
  <ContentControl Content="{Binding SelectedModul }"/>

もちろん、すべてのビューモデルは INotifyPropertyChanged を実装し、適切に上げる必要があります。

ps: コードは IDE なしで記述されているため、エラーは無視してください^^

于 2012-10-17T14:08:00.267 に答える