C# EventHandler始终为空?
我想创建一个事件并在另一个ViewModel上订阅。事件处理程序在第一个ViewModel上始终为null。 在第一个Viewmodel中,我声明了事件并引发如下C# EventHandler始终为空?,c#,wpf,events,event-handling,uap,C#,Wpf,Events,Event Handling,Uap,我想创建一个事件并在另一个ViewModel上订阅。事件处理程序在第一个ViewModel上始终为null。 在第一个Viewmodel中,我声明了事件并引发如下 public event EventHandler EditSearchChanged; EditTileVM.EditSearchChanged += EditTileVM_EditSearchChanged; private void EditTileVM_EditSearchChanged(object sender
public event EventHandler EditSearchChanged;
EditTileVM.EditSearchChanged += EditTileVM_EditSearchChanged;
private void EditTileVM_EditSearchChanged(object sender, EventArgs e)
{
this.EditTileVM = (sender as EditTileViewModel);
}
作为
if (EditSearchChanged != null)
{
EditSearchChanged(this, null);
}
在第二个Viewmodel中,我声明了第一个Viewmodel的一个属性
private EditTileViewModel editTileVM;
public EditTileViewModel EditTileVM
{
get
{
return editTileVM ?? (editTileVM = new EditTileViewModel());
}
set
{
editTileVM = value;
RaisePropertyChanged();
}
}
并按如下方式订阅活动
public event EventHandler EditSearchChanged;
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 framework的两个视图模型之间使用:
// Subscribe
eventAggregator.GetEvent<CloseAppliactionMessage>().Subscribe(ExitMethod);
// Broadcast
eventAggregator.GetEvent<CloseAppliactionMessage>().Publish();
//订阅
eventAggregator.GetEvent().Subscribe(ExitMethod);
//广播
eventAggregator.GetEvent().Publish();
请看Rachel Lim的一篇很好的教程
或使用:
//订阅
Messenger.Default.Register(ExitMethod);
//广播
Messenger.Default.Send此处EditSearchChanged为空是否可能是行“EditTileVM.EditSearchChanged+=EditTileVM\u EditSearchChanged;”从未执行,因此从未设置?也许可以提供更多的代码?你能在EditTileVM.EditSearchChanged+=EditTileVM\u EditSearchChanged
上放置一个调试器并检查它是否被触发吗?添加了图片debugger@subminer请随便问任何问题。如果您觉得我的回复对您有帮助,那么您可以将我的回复标记为答案,以简化将来对其他人的搜索。请看这个