在不同窗口中建立视图模型之间的关系

本文关键字:模型 之间 关系 视图 建立 窗口 | 更新日期: 2023-09-27 18:35:40

我的程序结构如下:


主窗口:

窗口>视图模型

用户控件1(绑定到contentPresenter)->视图模型->模型

^ TreeView (In UC1)->ViewModel->Model

子窗口:

窗口>视图模型

用户控件2(绑定到contentPresenter)->视图模型->模型


*子窗口是从 UC1->ViewModel 创建和打开的。

我需要在粗斜体视图模型之间创建关系。具体来说,这是子窗口的用户控件中的视图模型,以及主窗口的用户控件中TreeView的视图模型。

这是必需的,因为我想从子窗口向TreeView添加节点。问题是,尽管我在 UC2->VM 中为 TreeView (UC1)->VM 设置了一个属性,但我收到一个NullReferenceException,因为 UC2->VM 无法将该属性设置为除了新的 TV->VM 之外的任何属性。

法典:

用户控件2->视图模型

public ViewModel _TreeVM;
private Command _newNode;
public UserControl2_VM()
{
    _newNode = new Command(NewNode_Operations);
}
public ViewModel TreeVM
{
    get { return _TreeVM; }
    set
    {
        _TreeVM = value;
        NotifyPropertyChange(() => TreeVM);
    }
}
//Command -- Adds new node
public Command NewNode { get { return _newNode; } }
private void NewNode_Operations()
{
    TreeVM.addNewNode(); //**NullReferenceException
}

子窗口中的DataTemplate

<DataTemplate DataType="{x:Type project:UserControl2_VM}">
            <UC:ChildWindowUC/>
        </DataTemplate>

如何使我能够从子窗口的用户控件中的视图模型访问TreeView的视图模型?

在不同窗口中建立视图模型之间的关系

将 ParentViewModel 传递给 ChildViewModel,以便您可以引用它。

DataContext = childWindowViewModel(ParentViewModel);