Tengo una aplicación Silverlight mvvm que carga la vista principal con 2 controles de usuario cargados en 2 ContentControls, uno con el cuadro de lista que muestra elementos y otro con el botón editar. Cuando hago clic en el botón editar, se cargan 2 nuevos controles de usuario en ContentControls, uno que muestra datos para editar (EditData) y otro que tiene el botón Guardar y Cancelar (EditAction). cuando hago clic en el botón Guardar, se provoca un evento que se define en la clase GlobalEvents.cs separada como:El evento se dispara más y más veces
public event EventHandler OnSaveButtonClicked;
public void RaiseSaveButtonClicked()
{
this.OnSaveButtonClicked(this, EventArgs.Empty);
}
y suscribirse a él en el otro control de usuario EditData, porque tengo que transferir esos datos editados a través EventArgs personalizados, así que han puesto en el constructor de es modelo de vista:
this.globalEvents.OnSaveButtonClicked += (s, e) => SaveData();
y en el Guardar datos:
public void SaveData()
{
globalEvents.RaiseSaveData(EditedGuy);
}
cual plantea otra vísperas nt que carga controles de usuario previos en su contenido de control y muestra datos editados en el cuadro de lista. Eso está bien, pero cada vez que hago clic en editar y luego lo vuelvo a guardar, aumenta el evento dos veces, y de nuevo 3 veces, luego 4 y así sucesivamente. ¿Cómo puedo lograr que se eleve solo UNA vez? Pensé que podría ser debido a que cada vez que haga clic en editar una nueva instancia del control de usuario se carga y no sé, tal vez la suscripción al evento se mantiene, por lo que he intentado pegar
this.globalEvents.OnSaveButtonClicked -= (s, e) => SaveData();
a la Desechar() método, pero sin éxito. ¿Cómo puedo hacer que esto funcione?
¡Muchas gracias! No sabía que las lambdas no pueden usarse para anular el registro de eventos. Mi mal, gracias por mostrarme el camino correcto:] –