我的程序按以下方式构建:
MainWindow:
窗口 - >视图模型
UserControl1(绑定到contentPresenter
) - > ViewModel->模型
^ TreeView
(在UC1中) - > ViewModel - >模型
子窗口:
窗口 - >视图模型
UserControl2(绑定到contentPresenter
) - > ViewModel - >模型
*子窗口是从UC1-> ViewModel创建并打开的。
我需要在粗体斜体ViewModel之间创建关系。具体来说,这是子窗口的用户控件中的ViewModel,以及mainWindow的用户控件中TreeView
的ViewModel。
这是必要的,因为我想从子窗口向TreeView
添加节点。问题是,虽然我在TreeView
(UC1) - > VM的UC2-> VM中设置了属性,但我收到NullReferenceException
,因为UC2-> VM无法设置属性等于除了新的TV-> VM之外的任何东西。
代码:
UserControl2->视图模型
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>
如何制作它以便我可以从子窗口的用户控件中的ViewModel访问TreeView
的viewModel?
答案 0 :(得分:2)
将ParentViewModel传递给ChildViewModel,以便您可以引用它。
DataContext = childWindowViewModel(ParentViewModel);