Вызов формы изменения свойств объекта WPF MVVM

Есть TreeView (каталог разнотипных объектов) и TabControl, который будет в себе хранить формы.

<!-- Представление каталога -->
<GroupBox Header="Catalog">
    <TreeView FontSize="14pt" ItemsSource="{Binding RootNodes}">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type vm:NodeViewModel}"
                                        ItemsSource="{Binding Subnodes}">
                <StackPanel Orientation="Horizontal">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Добавить" Command="{Binding AddChildCommand}" />
                            <MenuItem Header="Удалить" Command="{Binding RemoveChildCommand}" />
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type vm:EquipmentNodeViewModel}"
                                        ItemsSource="{Binding Subnodes}">
                <StackPanel Orientation="Horizontal">
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Добавить" Command="{Binding AddChildCommand}" />
                            <MenuItem Header="Удалить" Command="{Binding RemoveChildCommand}" />
                            <MenuItem Header="Тест" />
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
        <i:Interaction.Behaviors>
            <service:BindableSelectedItemBehavior SelectedItem="{Binding Path=SelectedNode, Mode=TwoWay}"/>
        </i:Interaction.Behaviors>
    </TreeView>
</GroupBox>

<!-- Представление контейнера для форм -->
<TabControl Grid.Column="1" Grid.Row="0"
            ItemsSource="{Binding Workspaces}">
    <TabControl.Resources>
        <DataTemplate DataType="{x:Type vm:Workspace1ViewModel}">
            <v:Workspace1/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:Workspace2ViewModel}">
            <v:Workspace2/>
        </DataTemplate>
    </TabControl.Resources>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=HeaderText}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

В данный момент я могу удалять/создавать записи через контекстное меню.
Команды поведения узлов определены в ViewModel NodeViewModel

        #region AddChildCommand

        public ICommand AddChildCommand { get; }

        private bool CanAddChildCommandExecute(object param) => true;

        private void OnAddChildCommandExecuted(object param)
        {
            try {
                using (var context = new EFContext()) {
                    var node = new CLASSNODE_DEFINITIONS {
                        type = Type,
                        parent_id = _Node.id
                    };
                    node.name = $"new{node.type}1";
                    node.disp = $"New {node.type}";

                    context.CLASSNODE_DEFINITIONS.Add(node);
                    context.SaveChanges();

                    Subnodes.Add(new NodeViewModel(node, this));
                }
            } catch (Exception e) {
                throw e;
            }

        }

        #endregion

Но теперь мне надо сделать следующее: допустим, при добавлении как то нужно

  1. передать узел, который был добавлен, в конструктор Workspace (формы т.е. View будут заготовлены для каждого типа объекта в каталоге), но свойство коллекции Workspaces находится НЕ на NodeViewModel, а на WinMainViewModel (как передать правильно не могу понять)
  2. выбрать его в дереве каталога
  3. как лучше всего реализавать изменение свойств объекта? в плане передачи данных и сввязываний

Как вы поняли это просто обычный древовидный каталог, где узлами могут быть разные типы данных и иметь разное поведение.

А при нажатиях ИЛИ по контекстному меню можно вызывать ещё какие то заготовленные View в Workspaces и манипулировать с объектом.

Вот ещё код:

Допустим форма для оборудования

    internal class Workspace1ViewModel : WorkspaceViewModelBase
    {
        public Workspace1ViewModel() => HeaderText = "1";

        public string EquipmentField = "Equipment";
    }

Это я делал разный тип ViewModel для разных функций в ContextMenu, пока всё работает

    internal class EquipmentNodeViewModel : NodeViewModel
    {
        public EquipmentNodeViewModel(CLASSNODE_DEFINITIONS node, NodeViewModel parent) : base(node, parent)
        {

        }
    }

это для опор

    internal class Workspace2ViewModel : WorkspaceViewModelBase
    {
        public Workspace2ViewModel() => HeaderText = "2";

        public string EquipmentField = "Support";
    }

    internal class WorkspaceViewModelBase : ViewModelBase
    {
        public string HeaderText { get; set; }

        public override string ToString() => HeaderText;
    }

Ответы (0 шт):