0

ですから、MVVMに頭を悩ませようとしていますが、答えよりも質問の方が多いことがわかりました。次のステップになると、チュートリアルは私には十分に行きません...

基本的に、アイテムのリストと、各アイテムの詳細を取得する方法が必要です。

以下は私がオンラインで見つけた例であり、リストを表示するのに最適ですが、VMを使用してこのアイテムの詳細を取得する方法を知る必要があります。

private IList<item> m_items;
private IList<item> m_Item;


private IList<item> getItemDetail(Int32 iId)
{
    var myItem =
        from i in items
        where i.iId == iId
        select i;

    m_Item = new List<item>();
    foreach (var item in myItem)
    {
        m_Item.Add(item);
    }
    return m_Item;
}

public myViewModel()
{

    m_items = new List<item>
    {        
    new item(1, "test,),
    new item(2, "test2"),
    new item(3, "test1")
    };

    m_Item = new List<item>();
    m_Item = getItemDetail(iId);

}

アップデート:

上記のビューモデルコードを更新しました。私が行ったことは、ユーザーが詳細ページに移動すると、ビューモデルが特定のIDで呼び出され、詳細リストに入力される別のリストを追加したことだと思います。ここにはおそらくリストは必要ありませんが、メインページのコードとの一貫性を保つようにしたかったのです。

詳細ページでは、VMを次のように設定しています。

    itemViewModel VM = new itemViewModel((Int32)navigationParameter);
    DataContext = VM;

VM変数を壊すと、2つのリストが表示されます。ただし、私のバインディングはXAMLでは機能しません。サンプルXAMLを投稿する必要がある場合は、お知らせください。私はそれを行うことができますが、私がここで欠けている何かがあることを望んでいます。

私はMVVMを学ぼうとしていますが、正しくやりたいと思っています。ですから、間違った道を進むのではなく、「正しい」やり方を知りたいのです。エラーが発生した場合はお知らせください。

ありがとう!

4

2 に答える 2

2

そうです、最初に基本に戻って、MVVMに関するLaurentのMixセッションを見ると、codeplexのmvvmlightサイトからのリンクが見つかります。

しかし、それを打破するために、あなたは私が最初に始めたときに私がしたいくつかのハードルにぶつかりました。

1 :(最大の落とし穴)データバインディングを機能させるには、プロパティ(get and set pattern)を使用してデータを公開する必要があります。リスト変数だけは機能しません。これは、バインドしたいすべてのものに当てはまります。別の方法は、コードで直接アイテムソースを設定することですが、更新を含むデータバインディングのすべての機能が失われます。

2:データバインディングを理解するには、INotifyPropertyの変更されたパターンを理解する必要があります。これは、バインディングが正しく機能するための基礎となるガビン(専門用語; -D)です。提案されているように、新しい「マスター/詳細」プロジェクトテンプレートを開始し、データを保持しているビューモデルからビューモデルのデータを表示するビュー(ページ)まで、そのテンプレートをウォークスルーします。

3:リストにobservablecollectionsを使用します。これらはバインドに適していて、基本的には余分なものを含むリストです。

4:リストボックスの「selecteditem」または「selectedindex」をバインドして、ユーザーが選択したものをキャプチャすることもできます。バインドを「twoway」に設定して、ビューがデータをビューモデルにプッシュできるようにします。 、このように:{binding myselecteditem、mode = "twoway"}

これがお役に立てば幸いですが、まだスタックしているLaurentsビデオが最高の場合は、それらを数回見て、彼が行っていることを1行ずつフォローしてください。

于 2012-08-25T00:01:06.683 に答える
1

複数のコントロールが単一のコレクションまたはその選択されたアイテムにバインドされる、Microsoftが「マスター/詳細バインドシナリオ」と呼ぶものを使用したいと思います。そのためには、いわゆるコレクションビューにバインドする必要があります。これは、WPFで使用されるコレクションの上のレイヤーにすぎません。たとえば、ListBoxのItemSourceとContentControlのContentを同じコレクションビューにバインドすると、ContentControlはListBoxで選択されたアイテムの詳細を表示します。

参照: http: //msdn.microsoft.com/en-us/library/ms752347.aspx#master_detail_scenario

PSリストの代わりにObservableCollectionを使用し、ビューモデルがINotifyPropertyChangedを実装していることを確認することもできます。

于 2012-08-24T02:57:25.033 に答える