MVVMLight инструментарий класса Messenger, вызывающий проблемы.Увольнение N раз - PullRequest
1 голос
/ 17 мая 2011

У меня есть представление с именем Work.xaml. Этот Work.xaml содержит несколько WorkSkeleton.xaml. Модель представления Work.xaml - это 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);

            }
        }
    });

ViewModel отправляет это сообщение, когда ObservableCollection загружается следующим образом: -

 Messenger.Default.Send<ObservableCollection<WorkEducation>>(WorkEducation,
                    "BindWorkEducationList");

Все отлично работает с первого раза. Но как только я нажимаю кнопку «Работа» в MainPage.xaml, чтобы загрузить рабочую страницу 2 раза, сообщения принимаются в моем Work.xaml 2 раза, что снова и снова добавляет одни и те же элементы в панель стека. Это случается N раз. Если я нажал кнопку N-й раз, сообщение будет получено N раз в Work.xaml.cs. Но как это возможно?

Я четко указал получателя в Work.xaml.cs как this в качестве первого параметра, который означает, что сообщение должно быть получено для этого конкретного экземпляра. При нажатии кнопки «Работа» экземпляр полностью новый. Тогда почему он стреляет N раз?

Заранее спасибо:)

1 Ответ

3 голосов
/ 17 мая 2011

Вы уверены, что он запускает N раз для одного и того же экземпляра?Вероятно, у вас N экземпляров (N-1 ожидает сбора мусора), и именно поэтому вы видите это N раз.

...