2012-02-28 4 views
0

Model-View-Presenterパッシブビュー戦略でソフトウェアを構築しています。私たちのソフトウェアには、レポートとさまざまな種類のグラフがあります。だから我々は、すべてのチャートが実装する機能のためのチャートのための抽象クラスを持っている:MVPで抽象モデル用のビューとプレゼンターを作成する方法

class BarChart: AbstractChart 
{ 
    ... 
} 
class PieChart: AbstractChart 
{ 
    ... 
} 

レポート異なる含めることができます。そして、私たちは具体的なクラス(モデル)を持っている

abstract class AbstractChart 
{ 
    ... 
} 

、BarChartコントロールや円グラフを言うことができます種類のチャート。だから、

class Report 
{ 
    public List<AbstractChart> Charts {get; set; } 
    ... 
} 

、我々はレポートに異なるグラフを描画するには問題があります。

class ReportPresenter 
{ 
    Report _report; 
    ReportView _view; 
    ... 
    FillReportView(Report report) 
    { 
     foreach(AbstractChart chart in _report.Charts) 
     { 
      // Here is the problem: How do we create correct 
      // view and presenter for abstract chart? We need to 
      // create them, so we can add chart view to _view. 
     } 
    } 
} 
+2

MVVMをWPFで使用していない理由はありますか? –

+0

私たちはMVVMを試しましたが、本当にうまく見えましたが、私たちのニーズにはあまりにも複雑な方法でした。 – teemu

+1

私の経験では、MVVM *が正しく使用されています*大幅に**複雑さが軽減されます。 –

答えて

0

良いアイデアがないので、モデルの適切なプレゼンターを作成するファクトリクラスを作成してこの問題を解決しました。今のところ、UnityのようなIoCコンテナを使用する方が良いかもしれませんが、私は彼らのプレゼンターで作成したビューを持っています。

0

、それはそのオブジェクトに遭遇したとき、私はちょうど、各チャートタイプを描画する方法WPFを伝えるためにWPF DataTemplatesを使用しますビジュアルツリー内のタイプあなたはその期待してユーザーコントロールを構築することができるように、ユーザーコントロールの背後にある

<Application.Resources> 

    <DataTemplate DataType="{x:Type local:BarChart}"> 
     <local:BarChartUserControl /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type local:PieChart}"> 
     <local:PieChartUserControl /> 
    </DataTemplate> 

</Application.Resources> 

DataContextはまだ、あなたの対象になります

<ItemsControl ItemsSource="{Binding Charts}" /> 

それとも、手動でグラフを追加することができますDataContextのは、たとえばタイプBarChartまたはPieChart

のものであろう、ItemsControlは、余分なコーディングで、各タイプのための正しいテンプレートを使用してチャートのリストを描画しますサイドノートとしてContentControl

<ContentControl Content="{Binding SomeChartProperty}" /> 

のようなものを使用したビジュアルツリーのオブジェクトは、私は非常にMVVMの代わりに、MVPを使用してへの切り替えをお勧めします。これはWPFに完全に適しており、WPFまたはSilverlightを使用する際に使用される標準的なデザインパターンです。

+0

これはモデルのビューオブジェクトを作成する問題を解決しますが、誰が対応するプレゼンターを作成する必要がありますか? – teemu

+0

@teemu WPFを使用しているときはMVPで作業していませんが、UIコードではなくアプリケーションコードに関連しているように聞こえるので、ViewModelsによって作成されると思います。私は非常にWPVMで作業している場合でもMVVMに切り替えることをお勧めします。興味があれば私のブログには[シンプルなMVVMの例](http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/)があります。 – Rachel

関連する問題