我有一个名为Work.xaml的视图。此Work.xaml包含多个WorkSkeleton.xaml。 Work.xaml的ViewModel是WorkViewModel。
Work.xaml包含在MainPage.xaml中,该按钮具有用于加载Work.xaml的按钮。我希望到目前为止我还很清楚。该按钮的事件处理程序很简单:-
private void hypMyWork_Click(object sender, RoutedEventArgs e)
{
ShowGridContent(new Work());
}
private void ShowGridContent(UserControl control)
{
gridContent.Children.Clear();
gridContent.Children.Add(control);
}
在我的Work.xaml.cs的构造函数中,我注册了ObservableCollection类型的消息:
Messenger.Default.Register<ObservableCollection<WorkEducation>>(this, "BindWorkEducationList", collection =>
{
foreach (var item in collection)
{
if (item.IsEducationInfo == false)
{
WorkEducationSkeleton skeleton = new WorkEducationSkeleton();
skeleton.WorkEducation = item;
stkPanel.Children.Insert(0,skeleton);
}
}
});
当像这样加载ObservableCollection时,ViewModel正在发送此消息:-
Messenger.Default.Send<ObservableCollection<WorkEducation>>(WorkEducation,
"BindWorkEducationList");
第一次一切正常。但是,当我第二次单击MainPage.xaml中的“工作”按钮以加载“工作”页面时,将在我的Work.xaml中两次接收到消息,这一次又一次地将相同的项目添加到stackpanel中。这发生了N次。如果我单击按钮N次,则在Work.xaml.cs中将收到N次消息。但这怎么可能?
我已经在Work.xaml.cs中明确指定了收件人为this
作为第一个参数,这意味着将为该特定实例接收消息。单击“工作”按钮后,实例是全新的。那为什么要发射N次呢?
您确定同一实例被触发N次吗?您可能有N个实例在附近(N-1个正在等待被垃圾收集),这就是为什么您看到N次的原因。