Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EventHandler始终为空?_C#_Wpf_Events_Event Handling_Uap - Fatal编程技术网

C# EventHandler始终为空?

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

我想创建一个事件并在另一个ViewModel上订阅。事件处理程序在第一个ViewModel上始终为null。 在第一个Viewmodel中,我声明了事件并引发如下

  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请随便问任何问题。如果您觉得我的回复对您有帮助,那么您可以将我的回复标记为答案,以简化将来对其他人的搜索。请看这个