2012-04-04 19 views
0

私は、最初のタブにWPFデータグリッドを読み込むtabcontrolを持っています。 DataGridの行は、MemberViewModelsで埋められた です。 データグリッドのselectItemが変更されたときに、選択したMemberViewModelを取得できましたが、コマンドを使用してTabItemsコレクションに追加するRibbonViewModelにどのように渡すことができますか? RibbonViewModelは、私のリボンのViewModelです。そのリボンには、tabItemsCollectionに新しいMemberViewModelを追加するボタンがありますが、これはうまくいきます。しかし、私は新しいタブアイテムとして追加するために私のデータグリッドから選択されたMemberViewModelを追加したい。WPF DataGridから新しいTabItem MVVMに選択されたViewModelを渡します。

(OverviewViewModelで)選択datagriditemから選択MemberViewModelを取得するTabItemsCollection

private void AddSelectedMemberTabItem(object notUsed) 
{ 
    _tabViewModel.TabItems.Add(new MemberViewModel{ Header = "Member" }); // OK, this works fine 
    _tabViewModel.TabItems.Add(SelectedMemberViewModel); // this doesnt work, DP SelectedMemberViewModel is never filled, don't know how to retrieve it from the selected datagrid item. 
_addOverview.RaiseCanExecuteChanged(); 
} 

コードに新しいMemberViewModelを追加RibbonViewModel内のコード(コマンド):

public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(MemberViewModel), typeof(OverviewViewModel), new UIPropertyMetadata(OnSelectedMemberPropertyChanged)); 
public MemberViewModel SelectedItem 
{ 
    get { return (MemberViewModel)GetValue(SelectedItemProperty); } 
    set { SetValue(SelectedItemProperty, value); } 
} 

private static void OnSelectedMemberPropertyChanged(DependencyObject m, DependencyPropertyChangedEventArgs args) 
{ 
    var selectedMember = m.GetValue(SelectedItemProperty) as MemberViewModel; 
    _ribbonViewModel.SelectedMemberViewModel = selectedMember; // error: cannot access non-static field (_ribbonViewModel) in static contect 
} 

どのようにすることができますOverviewViewModelのOnSelectedMemberPropertyChangedメソッドから_ribbonViewModel.SelectedMemberViewModelを入力しますか?または私はこれで間違った方法を行っていますか?

+0

**関連** XAMLを表示できますか? –

+0

どのようなXAMLが必要ですか? DataGridにデータをバインドするもの、またはMembersViewModelをTabControlにバインドするもの? RibbonViewModelの新しいMemberViewModelsのコマンドを使用してtabItemCollectionに追加すると、タブが追加されるため、すべて正常に動作するため、そこに何か問題があるとは思われません。これで結構です。 私は、OverviewMemberViewModel(OverviewViewModelのDataGrid項目)をribbonControlViewModelに渡す方法を知りません。それは私の主な問題です... – PitAttack76

+0

外部からの視点からは、すべてのテキストではないときに問題を見るのが簡単です。 (XAMLは、アプリケーションのさまざまな部分の関係を確認するのに役立ちます)。あなたが見ているのは簡単です。なぜなら、他の誰もそれを見たことがないN時間のためにそれを見ているからです。 :) –

答えて

0

これは私がそれをしなければならない方法です、この方法で、私は選択されたMemberViewModelをDataGridから他のvarに渡すことができます。

private static void OnSelectedMemberPropertyChanged(DependencyObject m, DependencyPropertyChangedEventArgs args) 
{ 
    var b = m as OverviewViewModel; 
    if (b == null) 
    return; 
    var selectedMember = m.GetValue(SelectedItemProperty) as MemberViewModel; 
    b.selectedMemberChanged(selectedMember); 
} 
関連する問題