我的程序结构如下:
主窗口:
窗口->视图模型
UserControl1(绑定到contentPresenter
)->ViewModel->Model
^ TreeView
(在 UC1 中)-> ViewModel- >Model
子窗口:
窗口->视图模型
UserControl2(绑定到contentPresenter
)-> ViewModel- >Model
*子窗口是从 UC1->ViewModel 创建和打开的。
我需要在粗斜体视图模型之间创建关系。具体来说这是子窗口的用户控件中的ViewModel,主窗口的用户控件中的ViewModel TreeView
。
这是必要的,因为我想TreeView
从子窗口添加节点。问题是,虽然我在 UC2->VM 中为TreeView
(UC1)->VM 设置了一个属性,但我收到了一个,NullReferenceException
因为 UC2->VM 无法将属性设置为等于新 TV->VM 之外的任何内容。
代码:
UserControl2->ViewModel
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
从子窗口的用户控件中的 ViewModel 访问 's viewModel?