Impostazione
Facciamo il seguente esempio: Abbiamo una serie di eventi divertenti in televisione con ognuno della durata di un'ora e questo va avanti per 3 settimane. Vogliamo creare una semplice app che mostri il nome del prossimo evento.
Archiviamo l'evento nella gerarchia precedente dove Settimane può memorizzare Giorni e Giorni può memorizzare Ore etc in una raccolta (ad esempio, un ObservableCollection
), quindi è non un tipo is-a di gerarchia di oggetti, ma un ha-a tipo di gerarchia. Abbiamo, ad esempio, un TextBlock
sull'interfaccia utente che visualizza il nome dell'evento successivo, quindi è un database per la proprietà Text
dell'oggetto Event nella profondità della gerarchia. Diciamo che il nome dell'evento cambia improvvisamente e dobbiamo riflettere questo sull'interfaccia utente.
Il problema
Per fare questo, devo informare l'interfaccia utente che deve essere visualizzato un nome diverso. Ogni volta che affronto un problema simile, utilizzo eventi modificati come in event
si attiva in Evento che notifica Ore , quindi Ore attiva anche un event
che notifica Giorni ... fino a quando raggiungo il livello più alto che può notificare direttamente l'interfaccia utente. In questo modo, il event
trasmesso da Eventi è sottoscritto da Ore ecc. In Bottom-Up -kind di approccio.
Un modo alternativo è di rendere l'interfaccia utente stessa sottoscrivibile agli ˙eventi˙ trovati in ogni evento trovati in ogni ora ecc. Fino alla gerarchia, in un Top-Down -kind of approach.
La maggior parte delle volte, questo armeggiare funziona, ma quale sarebbe il modo accettato e corretto di notifica all'interfaccia utente in situazioni simili? Non c'è un modo più efficiente di fare questo rispetto a tutti questi abbonamenti?
Modifica
È stato portato alla mia attenzione che il modo generalmente accettato di trattare la gestione degli eventi e l'associazione dei dati in WPF è in effetti eseguito utilizzando il modello MVVM. Quindi, vorrei limitare la mia domanda a come un tale oggetto nidificato dovrebbe notificare l'interfaccia utente utilizzando questo modello.