[英]EventHandler is always null?
我想创建一个事件并订阅另一个 ViewModel。 事件处理程序在第一个 ViewModel 上始终为 null。 在第一个 Viewmodel 中,我声明了 Event 并引发如下
public event EventHandler EditSearchChanged;
并提高为
if (EditSearchChanged != null)
{
EditSearchChanged(this, null);
}
在第二个 Viewmodel 中,我已经声明了第一个 Viewmodel 的属性。
private EditTileViewModel editTileVM;
public EditTileViewModel EditTileVM
{
get
{
return editTileVM ?? (editTileVM = new EditTileViewModel());
}
set
{
editTileVM = value;
RaisePropertyChanged();
}
}
并按如下方式订阅事件
EditTileVM.EditSearchChanged += EditTileVM_EditSearchChanged;
private void EditTileVM_EditSearchChanged(object sender, EventArgs e)
{
this.EditTileVM = (sender as EditTileViewModel);
}
当您在以下属性中创建ViewModel
另一个新实例时会发生这种情况:
private EditTileViewModel editTileVM;
public EditTileViewModel EditTileVM
{
get
{
return editTileVM ?? (editTileVM = new EditTileViewModel());
}
set
{
editTileVM = value;
RaisePropertyChanged();
}
}
所以有两个EditViewModel
实例。
我建议您在 Prism 框架的两个viewModels
之间使用EventAggregator
模式:
// Subscribe
eventAggregator.GetEvent<CloseAppliactionMessage>().Subscribe(ExitMethod);
// Broadcast
eventAggregator.GetEvent<CloseAppliactionMessage>().Publish();
请参阅 Rachel Lim 关于简化事件聚合器模式的非常好的教程。
或者使用MVVM Light 信使:
//Subscribe
Messenger.Default.Register<CloseAppliactionMessage>(ExitMethod);
// Broadcast
Messenger.Default.Send<CloseAppliactionMessage
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.