MVVMLight工具包Messenger类导致问题。射击N次

时间:2011-05-17 03:50:04

标签: c# silverlight silverlight-4.0 mvvm mvvm-light

我有一个名为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次消息,这会一次又一次地将相同的项目添加到stackpanel。这种情况发生了N次。如果我在第N次单击按钮,将在Work.xaml.cs中收到N次消息。但这怎么可能呢?

我已明确指定Work.xaml.cs中的recepient为this作为第一个参数,这意味着要为此特定实例接收消息。单击“工作”按钮后,实例将全新。那为什么要开N次?

提前致谢:)

1 个答案:

答案 0 :(得分:3)

你确定它为同一个实例发射了N次吗?你可能有N个实例(N-1等待垃圾收集),这就是你看到N次的原因。