0

最初のタブでWPFデータグリッドをロードするタブコントロールがあります。データグリッドの行は MemberViewModel で埋められます。datagrids selectItem が変更されたときに選択した MemberViewModel を取得できましたが、コマンドを使用して TabItems コレクションに追加したい RibbonViewModel に渡すにはどうすればよいですか? RibbonViewModel は、リボンの ViewModel です。そのリボンには、新しい MemberViewModel を tabItemsCollection に追加するボタンがあり、これは正常に機能します。ただし、選択した MemberViewModel をデータグリッドから追加して、新しいタブアイテムとして追加したいと考えています。

TabItemsCollection に新しい MemberViewModel を追加する RibbonViewModel のコード (コマンド)

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();
}

選択した datagriditem から選択した MemberViewModel を取得するコード (OverviewViewModel 内):

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 を埋めるにはどうすればよいですか? それとも、これで間違った方向に進んでいますか?

4

1 に答える 1

0

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

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);
}
于 2013-01-17T08:26:15.390 に答える