2012-01-11 3 views
0

私のWPFアプリケーションにmvvmモデルを使用しています。親ユーザコントロールフォームを子のusercontrolデータグリッドの行から動的にロードする

iはフォーム 1.親(対照とフォーム) 2.子供(子供が親フォームから追加された行のリストを表示するデータグリッドを有する)

が、親フォームで2人のユーザーコントロールを持っています動的です。コントロールが静的でないことを意味します。 ユーザが子供のデータグリッド行をクリックすると、関連する親フォームを動的にリロードする必要があります。

MVVMパターンを使用してこれを実現する方法。どちらのコントロールも独自のビューモデルを持っています。 解決策をご提案ください。

答えて

1

GalaxoftのMVVM Lightを使用している場合、Messengerクラスを使用してコントロールの親に変更を通知できます。私はこれを私のプロジェクトで使い、魅力的に働いています。

私は他のメッセージングフレームワークもあると確信しています。あなたはGoogleにそれを必要としています。 ;)

Galasoft MVVM

2

親ViewModelは、子行の選択変更イベントをリッスンする必要があります。以下のサンプルは、私が念頭に置いていたことを説明するはずです:

internal class ParentViewModel 
{ 
    private ChildViewModel _child; 

    public ParentViewModel(ChildViewModel child) 
    { 
     _child = child; 
     _child.SelectedChildRowChanged += new EventHandler<ChildRowChangedEventArgs>(OnChild_SelectedChildRowChanged);  
    } 

    void OnChild_SelectedChildRowChanged(object sender, ChildRowChangedEventArgs e) 
    { 
     // do your dynamic stuff here 
    } 
} 

internal class ChildViewModel 
{ 
    private ObservableCollection<ChildRowViewModel> _rows; 

    public ListCollectionView RowView { get; set; } 

    public event EventHandler<ChildRowChangedEventArgs> SelectedChildRowChanged; 

    public ChildViewModel(IList<ChildRowViewModel> rows) 
    { 
     _rows = new ObservableCollection<ChildRowViewModel>(rows); 
     RowView = new ListCollectionView(_rows); 
     RowView.CurrentChanged += new EventHandler(OnRowView_CurrentChanged); 
    } 

    void OnRowView_CurrentChanged(object sender, EventArgs e) 
    { 
     if (SelectedChildRowChanged != null) 
     { 
      SelectedChildRowChanged(this, new ChildRowChangedEventArgs(RowView.CurrentItem as ChildRowViewModel)); 
     } 
    } 
} 

internal class ChildRowViewModel 
{ 
} 

internal class ChildRowChangedEventArgs : EventArgs 
{ 
    public ChildRowViewModel Row {get; private set;} 

    public ChildRowChangedEventArgs(ChildRowViewModel row) 
    { 
     this.Row = row; 
    } 
} 
関連する問題