У меня есть основной вид с вложенными дочерними представлениями. У меня есть основная виртуальная машина, которая содержит экземпляры дочерних виртуальных машин. В какой-то момент основная виртуальная машина должна взаимодействовать с дочерним элементом.Родительский просмотрМодель общения ребенка
В главной ВМ. Я определил ребенка 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"
. Линия ошибки находится в this.vmChild = new ChildViewModel();
Я думаю, что я дважды задал экземпляр модели представления, чтобы вызвать ее. В основной модели просмотра я уже определил дочерний экземпляр vm. В коде позади детского представления я определил его снова. Но я не знаю, как это исправить.
Ошибка строки находится в 'this.vmChild = new ChildViewModel();' _, но у вас есть 2 из этих строк. Это очень странно. –
Эта картина не помогает, если вы не сообщите нам, что находится в строке 82. Но похоже, что проблема может быть внутри этого конструктора. –
Строка 82 кажется непочтительной. Это код части catch. Теперь возникает ошибка «Катастрофический сбой» (Исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED)) ». Дело в том, что я использую ваш код. «DataContext» имеет значение null. Причина в том, что код достиг первого геттера. Ему не присвоено значение в ViewModel. – Bigeyes