J'ai un objet (en fait un élément visuel et un élément viewmodel) que j'aimerais utiliser à plusieurs endroits dans mon projet. La fonction de l'objet est de collecter des informations de paiement. Le client Smith a commandé un widget de ma société, mais il est en retard avec le paiement. Il m'appelle pour dire qu'il paiera le montant en entier le 1er. Je remplis le montant et la date du paiement, clique sur un bouton et une entrée est ajoutée à ma base de données avec les informations de paiement proposées par M. Smith. Maintenant, comme je l'ai dit, je veux utiliser cet objet à plusieurs endroits, et selon l'endroit où je l'utilise, il se peut que je veuille plus après avoir cliqué sur le bouton Soumettre. Avec Widgets, je vends aussi Whatsits et Whoozits. Après avoir reçu les informations de paiement pour un Whatsit, je veux remplir une table supplémentaire qui enverra un rappel au client. Après avoir saisi les informations de paiement Whoozit, je souhaite remplir le tableau des rappels, en envoyant immédiatement au client une confirmation par SMS.Quand et pourquoi utiliser des gestionnaires d'événements personnalisés
Mon idée originale était simplement d'ajouter un champ List<Action>
à mon objet d'origine, et en fonction de l'endroit auquel j'y accède, envoyez-lui toutes les actions supplémentaires que je veux faire après la mise à jour de la base de données originale.
Quelque chose comme ceci:
public class MoneyGetter
{
public List<Action> AfterEvents = new List<Action>();
public void SavePaymentInfo()
{
//logic for initial database entry
foreach(var a in AfterEvents)
{
a.Invoke();
}
}
}
Et après avoir créé l'objet, selon l'endroit où je l'utilise, je voudrais simplement ajouter
var mg = new MoneyGetter();
mg.AfterEvents.Add(() => { /* add situation specific action logic here */ });
Après avoir obtenu grâce à une partie de cela, il Il me semblait que c'est ce que les événements sont (je pense), et je devrais peut-être créer un événement OnSubmitted personnalisé pour mon objet MoneyGetter, en m'abonnant à cet événement de n'importe quel objet et en levant l'événement après l'entrée DB .
Est-ce le cas? Et si c'est le cas, pourquoi la création d'un gestionnaire d'événements personnalisé est-elle une meilleure idée que de simplement avoir un List<Action>
?
Vous n'avez pas besoin, vous pouvez toujours faire seulement args personnalisée qui étend de EventArgs et utilisez gestionnaire Buildin – sTrenat
Auriez-vous d'utiliser MVVMlight? Il y a un Messenger intégré. – Fildor
Oui, les événements sont censés être utiles dans ce scénario. Il n'y a aucune raison impérieuse que je vois qu'il doit être un événement personnalisé. Vous avez probablement eu cette mentalité parce que vous vous concentriez trop sur "ajouter". Les événements le font déjà d'eux-mêmes, tout ce dont vous avez besoin est l'opérateur + = pour vous abonner à l'événement. –