Parent ViewModel 通信 child
Parent ViewModel communicate child
我有一个带有嵌套 child 视图的主视图。我有一个主虚拟机,其中包含 child 个虚拟机的实例。
在某些时候,主 VM 需要与 child.
进行交互
在主虚拟机中。我将 child 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>
在child查看后面的代码。
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();
我认为我定义了两次视图模型实例导致了它。在主视图模型中,我已经定义了 child vm 实例。在 child 视图后面的代码中,我再次定义了它。但是我不知道怎么解决。
编辑:
在主视图中替换
DataContext="{Binding VmEChild}
和
DataContext="{Binding VmChild}
您正试图 'fix' 一个不应发生或不应发生的空值场景。
删除子代码隐藏的两部分,如果您真的需要 ViewModel 属性(这是用于 UWP 吗?),请使用:
// not normally needed in WPF/MVVM
public ChildViewModel ViewModel { get { return DataContext as ChildViewModel; } }
子视图正在获取 一个 ViewModel,它不应该创建一个。
我有一个带有嵌套 child 视图的主视图。我有一个主虚拟机,其中包含 child 个虚拟机的实例。 在某些时候,主 VM 需要与 child.
进行交互在主虚拟机中。我将 child 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>
在child查看后面的代码。
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();
我认为我定义了两次视图模型实例导致了它。在主视图模型中,我已经定义了 child vm 实例。在 child 视图后面的代码中,我再次定义了它。但是我不知道怎么解决。
编辑:
在主视图中替换
DataContext="{Binding VmEChild}
和
DataContext="{Binding VmChild}
您正试图 'fix' 一个不应发生或不应发生的空值场景。
删除子代码隐藏的两部分,如果您真的需要 ViewModel 属性(这是用于 UWP 吗?),请使用:
// not normally needed in WPF/MVVM
public ChildViewModel ViewModel { get { return DataContext as ChildViewModel; } }
子视图正在获取 一个 ViewModel,它不应该创建一个。