3

ここで少し単純化しています:

私はタブ コントロールを持っており、個々のタブがさらにタブを作成できるようにする必要があります。できれば兄弟。そのため、タブ コントロールを親、そのタブ ページを子と呼んでいます。

MVVM を使用すると、私のタブ コントロール ビュー モデルは次のようになります。

class ParentViewModel
{
    ObservableCollection<ChildViewModel> _pages;

    public ObservableCollection<ChildViewModel> Pages
    {
        get
        {
            if (_pages == null)
                _pages = new ObservableCollection<ChildViewModel>();
            return _pages;
        }
    }

    public ParentViewModel()
    {
        Pages.Add(new ChildViewModel());
    }
}

したがって、ParentViewModel に ChildViewModel オブジェクトのコレクションがあります。

これはうまく機能し、ParentViewModel 内からコレクションに必要なすべての追加の ChildViewModel オブジェクトを簡単に追加して、すべてビューにうまく反映させることができます。

私がやりたいことは、ChildView で (たとえば) ボタンを押すと、ParentViewModel オブジェクトのコレクションに別の ChildViewModel が追加されるようにすることです。

リレー コマンド、ルーティングされたコマンド、relativesource バインディング、依存性注入パターンなどについて多くのことを読んだことがありますが、これを達成するための「適切な」(MVVM の意味での) 方法と、それが最適な方法を教えてください。終わり。ありがとうございました!

4

2 に答える 2

0

MVVM Lit eクラスを使用できますMessenger(または独自に記述します)。

そして、子クラスから親クラスにメッセージを送信します。ここで例を参照してください。

メッセージ クラスを作成します。

public class AddNewChildMessage 
{
  public string Data {get;set;} //any data you need to pass
}

ParrentViewModel のコンストラクターで:

Messenger.Default.Register<AddNewChildMessage>
( 
     this, 
     ( message ) => AddNewChild(message ) 
);


private void AddNewChild(AddNewChildMessage message) 
{
  //do staf with message.Data if any
  Pages.Add(new ChildViewModel());
}

子ビュー モデル:

Messenger.Default.Send<AddNewChildMessage>( new AddNewChildMessage() );

子の追加は一例です。必要なロジックを追加できます。

于 2012-08-21T15:21:10.103 に答える