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