c# - MVVMLight工具箱Messenger类引起问题。射击N次

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

我有一个名为Work.xaml的 View 。此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次的原因。

关于c# - MVVMLight工具箱Messenger类引起问题。射击N次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6026042/

相关文章:

c# - 方法优化 - C#

c# - 滚动到列表框 wp7 的底部

silverlight - Prism MVVM - 如何将 IEventAggregator 传递给我的 ViewModel

mvvm - 使用 DataForm 和外部保存按钮

C# 事件处理程序问题

c# - 服务器端 AJAX 请求的排队机制

silverlight - 选择 TabItem 时将焦点设置到 TabItem 中的 TextBox

c# - Silverlight C# 中的 MD5 或其他加密

c# - MS UnitTestFramework 检索和记录异常 c#

java - 适用于 PC 和平板电脑的浏览器游戏 - 依赖哪个插件?