在不同的窗口中建立ViewModel之间的关系

时间:2013-10-15 17:09:39

标签: c# wpf mvvm treeview

我的程序按以下方式构建:


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?

1 个答案:

答案 0 :(得分:2)

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

DataContext = childWindowViewModel(ParentViewModel);