2016-12-29 4 views
1

これは、MVVM/WPFアプリケーションを構成する方法に関する「ベストプラクティスデザイン」問題です。WPF/MVVMタブ付きデザインとバインディングエラーの回避

Photoshopのように、複数の(タブ付きの)文書&をツールボックスで開くことができるエディタがあります。各ツールは、現在アクティブなドキュメントのプロパティを設定するだけです(フィルタを有効にすると、フィルタのパラメータを設定します。&)。私は、ActiproのDocking & MDIフレームワークをタブ付きインターフェイスに使用しています。

サポートされるドキュメントには、DocSimple & DocComplexと呼ばれるものがあります。DocComplexは、DocSimpleのすべての制御可能なプロパティといくつかの追加のプロパティを提供します。私は今何をやったか

  • MainWindow.xaml & MainWindowViewModelを全体的なアプリケーションのためには、
  • MainWindowViewModelがどのポイントActiveDocViewModelプロパティを、持っている(ドッキングコンテナ&ツールボックス/ツールコントロールが含まれています)現在アクティブなドキュメントタブのDocSimpleViewModelまたはDocComplexViewModelインスタンスに移動します(ドキュメントタブが開いていない場合は "null")。
  • MainWindowのツールボックスのさまざまなコントロールは、ActiveDocViewModelのさまざまなプロパティ(つまり、{Binding Path = ActiveDocViewModel.SomeProperty})にバインドされています。

質問1:一般的に、これは合理的なアプローチのように見えるのでしょうか?これは私の最初のMVVMアプリケーション(WinFormsから来ています)、&ですが、すべて正常に動作していますが、ActiveDocViewModel.Propにバインドすることをお勧めしますか?疑問がありましたが、実際には、 "1つの" MainWindowが "多くの可能な" docタブの1つにバインドする必要があるということです。

質問2:前述のように、DocComplexはDocSimpleより多くのプロパティ/オプションを提供しています。これは、ツールボックスのそのセクションの「可視性」にバインドされている

public bool IsComplexToolsVisible 
{ 
    get 
    { 
     return(ActiveDocViewModel != null && ActiveDocViewModel is DocComplexViewModel); 
    } 
} 

:私は&は次のようにMainWindowViewModelでプロパティを作成し、DocSimpleViewModelからDocComplexViewModelを継承することで、これを扱ってきました。 DocSimpleを開くたびに、Complex Toolsセクションのすべてのプロパティに対して "BindingExpression path error: 'xxx' property not found"エラーが発生します。 DocSimpleに「スタブ」プロパティを追加することでこれらを修正するのは簡単ですが、明らかに間違っていると感じました(継承を使用して「単純な」基本タイプに複雑な機能を追加すると、とにかくベースクラスのすべてのスタブを追加しますか?)。したがって、これらのバインディングエラーが存在すると、このアプローチに欠陥があるかどうか、そしてすべてのバインディングエラーを回避しながら、どのようにComplex vs Simpleシナリオを処理できるかが疑問になります。

任意の洞察力をいただければ幸いです:)

答えて

1

最初に、一般的な構造は、私の意見では非常によさそうだが、私は専門家ではないし、そのような何かを評価する必要はありません。その後


バインディングエラーが発生したあなたの問題のために: あなたは、単純なツールボックスに加え、追加が含まれているDocSimpleタイプのための「シンプルツールボックス」と別のテンプレートとテンプレートを与えるTemplateSelectorを、使用することができますDocComplexの部品。

+0

完璧!魅力のように働いて、ポインタのおかげで:) – Metal450

関連する問題