0

我有一个选项卡控件,它在第一个选项卡中加载 WPF 数据网格。数据网格中的行由 MemberViewModel 填充。当数据网格 selectItem 发生更改时,我已经设法获取选定的 MemberViewModel,但是如何将它传递给我想使用命令将其添加到 TabItems 集合的 RibbonViewModel?RibbonViewModel 是我的 Ribbon 的 ViewModel。在该功能区上有一个按钮,可以将新的 MemberViewModel 添加到 tabItemsCollection,这很好用。但是,我想从我的数据网格中添加选定的 MemberViewModel,以添加为新的 tabitem。

RibbonViewModel 中的代码(命令)将新的 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();
}

从选定的 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 传递给另一个 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);
}
于 2013-01-17T08:26:15.390 回答