0

我的程序结构如下:


主窗口:

窗口->视图模型

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?

4

1 回答 1

2

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

DataContext = childWindowViewModel(ParentViewModel);
于 2013-10-15T19:03:45.927 回答