繁体   English   中英

EventHandler 始终为空?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM