0

これはおそらく明らかですが、最善の方法を見つけることができません。

リストボックスにユーザーの ToDo を表示したい。これらの ToDo はデータベースにあり、Id、UserId、および Description で構成されています。

ユーザーがアプリにログインしました。

その特定の userId の ToDo を取得し、リストボックスにバインドするように設定するにはどうすればよいですか?

私は ObjectDataProvider を試していましたが、非静的なもの (_dbService、userId、言語など) と組み合わせて使用​​する方法がわかりません。

コード ビハインドでバインドするのではなく、これらすべてを静的にする唯一のオプションはありますか?

もしそうなら、これは ObjectDataProvider があまり役に立たないことを意味しますね? ハードコードされたパラメーターで使用されている例はたくさんありますが、そのような機能が必要な状況はほとんど見られません..

4

2 に答える 2

2

Model-View-ViewModelパターンを使用してすべての WPF を実行します。そこへのリンクを 1 つ提供しましたが、Google が負荷を与えてくれます。MVVM は WPF の標準パターンのようです。 このプロジェクトはおそらく必要以上に複雑ですが、よく書かれており、MVVM の使用法を実感できます。

基本的に、データのモデルを作成します。この場合、おそらく Id、UserID、および Description プロパティを持つ単純なクラス (ToDoItem と呼びます) を作成します。お好みのメカニズムを使用して、データベースからこれらのコレクションを取得してください。SQL、Entity Framework、標準クエリなどにリンクします。

次に、ViewModel を取得します。モデルのインスタンスごとに ViewModel のインスタンスを取得します。VM には、M への参照と、それへの「転送」プロパティがあります。ViewModel は、モデルを操作するために使用するものです。

次に、View を作成します。これが UI です。ビューの DataContext を ViewModel に設定すると、バインディングが自動的に ViewModel にバインドされます。あなたのビューは、あなたが見ることができるものになるだけです。すべての作業は ViewModel で行われます。これは、テストが非常に簡単であることを意味します。

そのため、ビューのボタンをクリックすると、バインディングはモデルを操作するビューモデルのコマンドにこれを渡します。

UI も ViewModel を持つ View です。そのため、UI VM はデータベースからモデルのコレクションをロードし、それらを ObservableCollection に貼り付ける場合があります。ListBox アイテム コレクションは、この ObservableCollection にバインドされます。

このような記事ですべてを説明するのは難しいです。いくつかの記事を読んで、あなたの考えを見てください。私もこれにはまだ慣れていませんが、MVVM について読んだことは報われたと思います。

于 2009-10-20T09:50:11.793 に答える
0

Hela Thomas、Tom は Orbit One から来ました :)

MVVMは行く方法です。私は 4 番目のプロジェクトに取り組んでおり、mvvm を使用すると WPF が本当に輝きます。あなたはすでに MVC (または recy*tyre で行ったように MVP) を試しました。ビューモデルはビューについてまったく何も知らないため、MVVMはさらに一歩進んでいます。

ビューはビューモデルにバインドされるため、ビューモデルへの参照があります (双方向、非常に強力で、典型的な MS デモを超えて機能します)。ビューモデルは単なるポコであり、ビュー、データ + 動作の表現です。この段落を掘り下げると、クールな用語 mvvm には秘密がなくなります。

小さなデモを思いつくことができるかどうかを確認します。たぶん後で時間があります。私が考え出すのは、ビューモデル (ファイル 2、poco クラス、分離コードと間違わないように) にバインドするビュー (xaml、ファイル 1) です。モデルは好きなものにすることができます (サービス層またはリポジトリへの直接)。2 方向バインディングの力を使用して、観察可能なコレクションにバインドします。つまり、コレクションに何かを追加/削除/...すると、エネルギーを入れなくてもビューがそれを取得します。

私の最初の 2 つの wpf プロジェクトは、規約に基づく強力なフレームワークである Caliburn Micro (codeplex を参照) を使用して行われました。これにより、ハードコアな wpf (主に自分でツアー依存関係プロパティを作成する) から保護され、wpf を完全に理解していなくても比較的高速に何かを作成できます。それ自体はマイナス面ですが、私にとってはうまくいきました。プロジェクト 3 の時点で、私はこれらの依存関係プロパティを自分で使い始めました。これにより、より優れた wpf 開発者になることができます。

質問は10月のものだと思います..良い解決策を見つけましたか?

于 2013-01-02T19:38:02.247 に答える