У меня есть приложение silverlight mvvm, которое загружает основной вид с 2-мя пользовательскими элементами управления, загруженными в 2 ContentControls, один со списком, отображающим элементы, а другой с кнопкой редактирования.Когда я нажимаю кнопку «Изменить», в ContentControls загружаются 2 новых пользовательских элемента управления, один из которых показывает данные для редактирования (EditData), а другой - кнопку «Сохранить и отменить» (EditAction).Когда я нажимаю кнопку «Сохранить», возникает событие, определенное в отдельном классе GlobalEvents.cs, например:
public event EventHandler OnSaveButtonClicked;
public void RaiseSaveButtonClicked()
{
this.OnSaveButtonClicked(this, EventArgs.Empty);
}
, и я подписываюсь на него в другом пользовательском элементе управления EditData, потому что мне нужно передать эти отредактированные данные.через пользовательские EventArgs, поэтому я поместил в конструктор его ViewModel:
this.globalEvents.OnSaveButtonClicked += (s, e) => SaveData();
и в Save data:
public void SaveData()
{
globalEvents.RaiseSaveData(EditedGuy);
}
, который вызывает другое событие, которое загружает предыдущие пользовательские элементы управления в ихControlContent и показывает отредактированные данные в списке.Это все хорошо, но всякий раз, когда я нажимаю на правку и затем снова сохраняю, это вызывает событие дважды, и снова 3 раза, затем 4 и так далее.Как я могу сделать это, чтобы быть поднятым только один раз?Я подумал, что это может быть потому, что каждый раз, когда я нажимаю кнопку «Изменить», загружается новый экземпляр пользовательского элемента управления, и я не знаю, может быть, подписка на событие остается, поэтому я попытался вставить
this.globalEvents.OnSaveButtonClicked -= (s, e) => SaveData();
вметод Dispose (), но безуспешно.Как я могу сделать эту работу?