2012-02-26 4 views
1

私はグリッドを持っています。これは、FooHistoryと言いましょう。今私はそれに関連する多くの機能が必要ですので、先に進んでFooHistoryクラスを作成します。今私はFooHistoryクラスとコントロールを持っています。私MainWindowコンストラクタでWPFコントロールのクラスを書くべきですか?

私は、このクラスの新しいインスタンスを作成するなどの依存性注入のFooHistoryクラスのソートにthis(すなわちMainWindow)のインスタンスを渡します。その後、FooHistoryクラスがFooHistoryコントロールと対話したい場合、私はthis.mainWindow.FooHistory.Items.Add(...)のようなことをします。

私の質問は、これがWPFアプリケーションを書くための推奨された方法ですか、それとも私はいくつかの基本的なアプローチが欠けていますか?

答えて

1

:ここ

は、いくつかのサンプルです。詳細はプログラムごとに異なるかもしれませんが、MVVMは通常3つの主要部分で構築されます。

モデル: これはあなたのデータオブジェクトです。これは

class Account 
{ 
    string Name {get;set;} 
    string Address {get;set; 
} 

ようなビジネスデータとすることができるだけでなく、のようなUIデータを指定できます

class Window 
{ 
    Point Position {get;set;} 
    Size Size {get;set;} 
} 

これらのオブジェクトは、データ、より多くの何を保持するためのものです。イベントはありません。コマンドもありません(MVVMの解釈が異なる1つの点があります)。

ViewModel: これはモデルをラップし、基礎となるモデルの周りにロジックを提供するためです。このクラスは、ビジネスモデルプロパティをビューの理解可能なプロパティに変換するためにも使用されます。

class AccountViewModel 
{ 
    public AccountViewModel(Account aWrappedModel) 
    { 
    } 

    string Name {get {return Model.Name;} } 

    AddressObject Address { get{ return new AddressObject(Model.Address); } 
} 

ビュー:

が、これはユーザーコントロール、カスタムコントロール、ウィンドウ、datatemplatesなど共通にもかかわらず は信じて、その罰金は、そうでない場合、あなたが持っているの背後にあるビューのコードを持つことができ、WPFの一部ですビューがコードを持つことが許可されていないと聞いたからといって、バックワードを曲げようとしています。

通常のアプローチは、モデル、1つ以上のビューモデルを作成し、これらのビューモデルをDataContextと設定することです。場合によっては、AccountViewModelのDataTemplateのように、指定されたデータを表示するためにDataTemplateが必要な場合があります。

このデザインでは、MVVMの基本であり、非常にうまく動作するDatabindingを大量に使用しています。もちろん、いくつかの問題が発生する可能性があります。モデルを使ってCollectionを処理する方法は?ビューモデルからイベントを処理するには?私のデータを保存するには?

しかし、ここでは多くのリソースがウェブで見つかっています。しかし、この回答は、私と他の人がWPFでどうやって仕事をしているかの大雑把な概要を示すはずです。

1

あなたの機能のほとんどは、プレゼンテーション・ロジック、 ある場合は(ユーザーコントロールをサブクラス化することによって)ユーザーコントロールを作成し、の.xamlと.xaml.csファイルのペアを持って、 とでプレゼンテーションロジックを置くことができます。 xaml.csファイル。

FooHistoryクラスの機能のほとんどがビジネスロジック(またはプレゼンテーション以外のもの)の場合は、FooHistoryコントロールをFooHistoryクラスから分離することは意味がありますが、この場合はおそらくコントロール用のインターフェイスを定義し、 FooHistoryインスタンスにこのインタフェースを使用してコントロールへの参照を渡します。 あなたのFooHistoryクラスは、プレゼンテーションについて何も知らなくても、WPFであることを知る必要はありません。

コントロールのツリー(SomeWindow.ParentControl.ChildControl.Itemsなど)を渡すことを避けることができれば、あなたの人生が楽になります。

0

はいすることができます......しかし........... 別の方法が.........

であることを行う必要はありませんグリッドで使用されるデータのデータセットを作成し、そのデータセット全体をグリッドにインポートします。ここで項目を追加する必要はありません。.....フィルタリング、並べ替え、追加、削除、または任意の操作が可能です。

1

モデルビュープレゼンターのパターンMVCの変種です。間違いなく、特にASP.NETとWinFormsでは良いパターンなので、WPFのいくつかのコア概念を利用していません。

データバインドとコマンドがあります。この機能の上に、MVCの新しい変種が進化しました。モデルビュービューモデル(MVVM)(プレゼンテーションモデルと呼ばれることもあります)。おおよその説明: あなたのウィンドウはビューと呼ばれます。 Youd Busines Logicはモデルにカプセル化されています。 モデルのビュー固有の表現であるプロパティを公開するViewModelクラスを作成します。また、VMはINotifyPropertyChangedを実装して、データの変更についてUIに通知する方法を提供する必要があります。同様の操作を、ICommandのプロパティで公開します。 Viewのコンストラクターでは、this.DataContext = new ViewModel() のように記述し、次に、{Binding PropName}構文を使用してViewコントロールのプロパティとViewModelをバインドします。

またプリズムMVVMライトのようなMVVMのためのいくつかのフレームワークをチェックアウトする場合があります。我々は我々のプログラムのためにMVVMのアプローチを使用しhttp://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/

+0

興味深いことに、MVVMで作成された小さなサンプルアプリケーションを念頭に置いたチュートリアル/記事の場所を教えてください。 – Tower

+0

私には良いと思われるサンプルをいくつか追加しましたが、私はこの方法を学ぶことは一度もしていませんでしたので、私は保証しません。私はフレームワークのドキュメントだけで始めます。常に「スタートガイド」のページかsimmilarがあります。 – Pein

+0

@rファクタ:これは、開始するのに適した場所です。http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – Grokys

関連する問題