Родительский ViewModel общаться дочерний

У меня есть основное представление с вложенными дочерними представлениями. У меня есть главная виртуальная машина, которая содержит экземпляры дочерних виртуальных машин.
В какой-то момент главная виртуальная машина должна взаимодействовать с дочерним устройством.

В главной виртуальной машине. Я определил дочернюю ViewModel как

 public ChildViewModel VmChild
    {
        get
        {
            if (this.vmChild == null)
                this.vmChild = new ChildViewModel();
            return this.vmChild;
        }
        set
        {
            if (this.vmChild != value)
            {
                this.vmChild = value;
                this.OnPropertyChanged("VmChild");
            }
        }
    }

В главном окне. У меня есть

<StackPanel Orientation="Vertical" HorizontalAlignment="Left" >
     <localViews:ChildView DataContext="{Binding VmChild}"> </localViews:ChildView>
</StackPanel>

В коде дочернего представления позади.

public ChildViewModel ViewModel
{
    get
    {
        if (this.vmChild == null)
            this.vmChild = new ChildViewModel();
        return this.vmChild;
    }
    set
    {
        if (this.vmChild != value)
        {
            this.vmChild = value;
        }
    }
}

И

private void InitializeViewModel()
{
    if (this.DataContext is ChildViewModel)
    {
        this.ViewModel = this.DataContext as ChildViewModel;
    }
    else
    {
        this.DataContext = this.ViewModel;
    }
}

Мой вопрос-мой код работает. Однако он имеет исключение, когда я открываю главное представление.

Исключение составляет NullReferenceException was thrown on "ChildView": Cannot create an instance of "ChildView". Строка ошибки at this.vmChild = new ChildViewModel();

Я думаю, что я определил экземпляр модели представления дважды, чтобы вызвать его. В модели главного представления я уже определяю дочерний экземпляр виртуальной машины. В коде за дочерним представлением я определил его снова. Но я не знаю, как это исправить.

РЕДАКТИРОВАТЬ:
изображение

2 ответа

  1. Вы пытаетесь «исправить» сценарий значения null, который не должен происходить или должен быть оставлен в покое.

    Удалите обе части дочернего кода и если вам действительно нужно свойство ViewModel (это для UWP?), использовать это:

    // not normally needed in WPF/MVVM
    public ChildViewModel ViewModel { get { return DataContext as ChildViewModel; } }
    

    Дочернее представление получает ViewModel, оно не должно создавать его.