Ne ho letto un po ', ma ho un po' di tempo, quindi ora richiederei una soluzione semplice e prometto di leggerlo in seguito. Vengo da uno sfondo di winforms c # e ultimamente ho lavorato con WPF. Dato che l'interfaccia utente che sto implementando non è un input intensivo, ho utilizzato fino ad ora INotifyPropertyChanged. Fino a quando mi sono imbattuto in questo:
Ho un'interfaccia 3D da una libreria di terze parti (MogreInWpf). Facendo clic su un oggetto nell'interfaccia 3D, ho bisogno di visualizzare alcune proprietà dell'oggetto (posizione, dimensione, ecc.). Ecco come appare il mio code-behind. Ho una classe, chiamiamola objectOfInterest, che salva tutte queste proprietà, i dati 3D e include alcuni metodi che manipolano l'oggetto. In uno di questi metodi, viene generata una griglia contenente caselle di testo per simulare coppie di proprietà nome-valore. Come "Posizione X:" "134". Poiché queste proprietà sono solo modificate dall'utente, sono riuscito a collegare la casella di testo sull'evento modificato di testo per rispondere alla maggior parte delle modifiche, ad esempio quando la dimensione viene modificata da 134 a 1345.
Una volta generata questa griglia, questa viene impostata per essere visualizzata nella finestra principale utilizzando un ContentPresenter e impostandone il contenuto su objectOfInterest.grid. Funziona come un fascino. Ora, devo implementare una proprietà che cambia il modo in cui appare la griglia delle proprietà a seconda di una casella combinata inclusa in questa griglia.
Ad esempio, se l'oggetto è un cubo, voglio mostrare larghezza / altezza / lunghezza, mentre voglio solo una proprietà raggio per mostrare se è una sfera. In questo caso sono bloccato, poiché la rigenerazione della griglia sulla casella combinata selectedValueChanged non notifica la vista e la generazione si verifica nella classe objectOfInterest anziché nella classe della finestra principale, il che significa che non riesco a rebind la griglia una volta rigenerata (I impossibile chiamare contentPresenter.Content = objectOfInterest.grid di nuovo, poiché la finestra principale non ha idea che la griglia delle istanze sia cambiata). Quindi, senza comprendere completamente i metodi MVVM e riscrivere la maggior parte dell'applicazione per adattarla al modello, come può essere realizzato?