2009-03-06 3 views
1

私は次のようにMVPパターンを使用し、私が書かれている小さなアプリケーションがあります。私はのインスタンスに渡されたフォーム MVPパターンを使用する場合、ListViewItemリストはどこに作成しますか?

  • にこのインタフェースを実装したIView
  • と呼ばれるインタフェースを作成

    • をプレゼンターのコンストラクターにIViewとしてフォームを作成します。

    フォームにはListViewコンポーネントが含まれています。 ListViewに挿入される項目は、プレゼンターで作成されます。私は、プレゼンターにUIコンポーネントクラスを使用することは良い考えではないと聞きました。これらのListViewItemをどこでどのように作成すればいいですか?フォーム自体にListViewItemsを作成することはできますが、フォームにロジックがないため、できるだけ軽量にする必要はありませんか?

    編集:N.B.これはWindowsフォームアプリケーションです

  • +0

    WindowsフォームまたはWebフォームについてここで話していますか?どちらも "ListView"という名前のコンポーネントを持っています。 –

    +0

    またはおそらくWPF?そのことを忘れてしまった。 –

    +0

    これはWindows Formアプリケーションです – Draco

    答えて

    2

    私はフォーム自体 でListViewItemsを作成することもできますが、フォーム は持たずロジックで できるだけ軽量である必要はないのですか?

    単純なループであり、単純なオブジェクト作成は困難であるとは考えられません。このようなコードは、ビューのためにかなりlilghtweightです(他の人が示唆したように)

    class SomeView 
    { 
        void SetData(IEnumerable<DataItem> dataItems) 
        { 
        foreach(DataItem dataItem in dataItems) 
        { 
         ListViewItem lvi = new ListViewItem(); 
         lvi.Text = dataItem.Text; 
         ... 
        } 
        } 
    } 
    

    また、あなたは、バインディングを使用することができます。これにより、SetDataがさらに簡素化されます。

    技術はMVPのために設計されていないので、分離懸念の良いアイデアを理由に適用されるべきであるとして、あなたが速いコードレビュー:-)

    1

    ListViewItemsはビュー固有のためビューに作成する必要があります。プレゼンターでそれらを作成する場合、すべてのビューはListViewItemsに依存していなければなりません。

    1

    データ項目を発表者に作成してください。ビューにこれらを割り当て、データ項目を表示するには、結合ビューの使用データを持っている:

    //in presenter 
    var dataItems = _someService.GetData(); 
    _view.Data = dataItems; 
    
    //in view code-behind 
    public ICollection<DataItem> Data 
    { 
        get; set; //omitted for brevity - will require change notification 
    } 
    
    //in view XAML 
    <ListView ItemsSource="{Binding Data}"> 
        <ListView.View> 
        <GridView> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Name}"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Age}"/> 
        </GridView> 
        </ListView.View> 
    </ListView> 
    
    +0

    こんにちはケント、これはWindowsフォームアプリケーションです、ごめんなさい – Draco

    +0

    lol - 問題ありません。しかし、同じ理論が適用されます。 PresenterはUIには無関心で、データをビューに渡します。ビューは、データを表示するためにバインディングなどを使用できます。 –

    0

    私は最近、同じ難問を持っていましたが、ツリービューのために。

    これをうまく解決するには、データのビジュアル要素への作成/変換を処理するために代理人を使用する必要があります。

    例:

    class View 
    { 
        TreeNode Builder(object foo, object bar) { ... } 
    } 
    
    class Presenter 
    { 
        void InitView(View v) 
        { 
        Model.Build(v.Builder); 
        } 
    } 
    

    [OK]を、それは非常に粗いですが、それはあなたが非常に簡単に木のような再帰的な構造を構築することができます。 :)

    注:モデルとビューは実際にお互いの種類を気にしません。

    0

    のWinFormsで、それを「検証」することができるように、単純なビューのコードを保つあまりにも試してみてください。 私はフォームでコントロールを期待します。プレゼンターはビュー固有のものがなくてはなりません。すべてのコントロール自体は、データと表現を含んでいるため、mvpを破壊しています。アプリケーションが成長するにつれて、MVPスタイルに保つことはますます難しくなります。 MVPの実装にはあまり効果がありません。 通常、WinFormsの従来のコントロールスタイル(コンポーネントスタイル)はうまく機能します。

    関連する問題