10

Capisco l'IObserver & IObserver sono implementazioni del pattern di osservatore e possono essere utilizzate in circostanze simili a eventi .Net.IObservable <T> e INotifyPropertyChanged - c'è una connessione

Mi chiedevo se c'è qualche relazione con INotifyPropertyChanged?

Attualmente utilizzo INotifyPropertyChanged per l'associazione dati in Winforms & applicazioni WPF e mi chiedevo se sarò in grado di utilizzare IObservable in scenari di associazione dati UI?

Acclamazioni

AWC

risposta

3

A meno che WinForms e WPF binding supportano anche IObservable, non contribuirà a mantenere l'interfaccia utente aggiornata con i cambiamenti nel modello. Il motivo per cui è possibile utilizzare INotifyPropertyChanged è perché il codice dei binding in WinForms e WPF cerca questa interfaccia e, quando implementato, utilizza il suo evento per mantenere aggiornata l'interfaccia utente.

+0

grazie ma non molto utile, so come funziona l'interfaccia rispetto al binding – AwkwardCoder

+2

@AWC: al contrario, la sua spiegazione riguarda le tue domande, in particolare la tua ultima. –

+0

lascia vedere - dichiaro che uso già INotifyPropertyChanged quindi quindi ho intenzione di capire come funziona con Winforms \ WPF, volevo sapere su IObservable e se questo ha qualche schema di utilizzo in Winforms \ WPF che è l'ultimo domanda. Quindi non è davvero utile ... – AwkwardCoder

5

Da quello che posso raccogliere, non c'è relazione. Gli osservatori/eventi .NET sono due modi per ottenere il comportamento dello stile Osservatore/Notifica.

La risposta di Microsoft è stata quella di creare il modello di eventi .NET, non deprecarlo a favore degli oggetti Observer registrati manualmente.

Uno dei miei più grandi tormenti con gli eventi è l'incapacità di cancellare la catena di delegati su richiesta, il che porta a diversi scenari di perdita di memoria gestita. A tal fine, Microsoft ha introdotto il concetto di eventi deboli, ovvero per affrontare il problema delle tempistiche non corrispondenti per Observables/Observers.

Ulteriori informazioni sul modello WeakEvent here.

Josh Smith ha rilasciato un'implementazione di WeakEventManager per INotifyPropertyChanged here. Ciò fornisce un modo più sicuro (dal punto di vista della memoria) di collegare oggetti che cambiano proprietà e i loro osservatori.

+0

Il progetto MVVM Foundation sembra morto, nessuna attività in 2,5 anni – BlackICE

1

Se vuoi dire IObserver/IObservable come definito dalle estensioni Rx:

http://channel9.msdn.com/shows/Going+Deep/Kim-Hamilton-and-Wes-Dyer-Inside-NET-Rx-and-IObservableIObserver-in-the-BCL-VS-2010/

e:

http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

Poi le sue mele e arance come.

INotifyPropertyChanged fornisce solo un collegamento eventi comune per l'associazione dati/etc per consentire ai controlli di sapere quando aggiornare i valori associati.

IObservable/IObserver è più simile a "query con sequenze di eventi", ma anche questa è una descrizione scadente.

Hmm ... ok, quindi sai come puoi mettere cose in questo "sacco" chiamato una raccolta, e quindi interrogare quella raccolta (manualmente o con un'istruzione LINQ) per estrarre i valori, giusto? È un po 'come quello, ma invece di "estrarre" i dati da una "borsa", stai ricevendo degli "stimoli" per te.

spudorato che potrebbe aiutare o ulteriori confuse: http://blog.lab49.com/archives/3252

2

Prima di tutto, io sono un po 'nuova per Rx, in modo da prendere i miei commenti di conseguenza.

Detto questo, penso che ci sia una grande opportunità per la cooperazione tra INotifyPropertyChanged e l'IObservable di Rx. Penso che sia relativamente ovvio che l'interfaccia utente sia costruita intorno all'INPC a questo punto. Tuttavia, INPC è anche un modo primario per rilevare le modifiche e gestire gli scenari in cui un modello di dominio o un modello di visualizzazione presenta interdipendenze tra oggetti e proprietà. Sono queste interdipendenze che sembrano buoni candidati per Rx.

Lavorare direttamente con INPC è un po 'complicato e un po' doloroso. Un sacco di stringhe magiche da affrontare. È anche un po 'doloroso guardare un evento su un oggetto a più livelli di distanza nell'albero degli oggetti.

Ma se riesco a modellare queste interazioni "in modo reattivo", i miei modelli di visualizzazione e i modelli di dominio iniziano a sembrare un po 'più eleganti. Ciò è evidente nell'eleganza di progetti come Bindable Linq, Continuous Linq, Obtics, ecc. Queste librerie semplificano la creazione di "valori live" o "raccolte live" che si aggiornano automaticamente (oserei dire "in modo reattivo") alle modifiche. Linq continuo ha anche un "reactive object" framework per fare la programmazione reattiva, anche se senza Rx.

Mi sembra che le sinergie entrino se possiamo usare Rx per mantenere il modello e il modello di vista coerenti. Quindi possiamo rendere la "superficie legabile" del modello modello/vista onorare l'INPC continuando ad aumentare PropertyChanged secondo necessità. Ho visto un paio elegant extension methods che creerà un osservabile da INotifyPropertyChanged. Sembra che l'altra metà potrebbe essere quella di creare un'infrastruttura che si traduca da Rx in INPC.

+0

+1 Questo è esattamente ciò che intendo dare un'occhiata. Anche ricercando [ReactiveUI] (http://www.reactiveui.net/) – Benjol

Problemi correlati