[英]MVVMLight toolkit Messenger class causing problems. Firing N times
我有一个名为 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 中收到 2 次,这一次又一次地将相同的项目添加到堆栈面板。 这种情况发生 N 次。 如果我第 N 次单击按钮,消息将在 Work.xaml.cs 中收到 N 次。 但这怎么可能呢?
我已经明确规定在Work.xaml.cs的recepient是this
为这意味着该消息是用于此特定实例要接收的第一参数。 单击“工作”按钮,实例是全新的。 那为什么要开N次呢?
你确定它会为同一个实例触发 N 次吗? 您可能有 N 个实例(N-1 个等待被垃圾收集),这就是您看到它 N 次的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.