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