在不同窗口中建立视图模型之间的关系
本文关键字:模型 之间 关系 视图 建立 窗口 | 更新日期: 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);