У меня есть представление с именем 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 раз?
Заранее спасибо:)