簡體   English   中英

MVVMLight 工具包 Messenger 類導致問題。 射擊N次

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM