Domanda

Sto lavorando ad un'applicazione WPF che ha un treeview che rappresenta un XML. Carico l'XML su XDocument, quindi associo TreeView a questo oggetto.

Ora utilizzando il modello MVVM , I desidera fornire un ViewModel in cima a XDocument . Quali sono alcune delle cose che dovrei implementare nella classe ViewModel.

Sto pensando,

  1. Comandi Routed che si associano ai comandi ContextMenu su TreeView per consentire aggiungere nodo, rimuovere nodo, modificare nodo ecc
  2. Logica per modificare effettivamente attributi e nomi di nodo nella vista.

Sto andando nella giusta direzione? Cos'altro dovrei fare per renderlo più pulito, modulare allo stesso tempo facile da capire.

Dovrei usare RoutedCommands o implementare l'interfaccia ICommand e creare i miei comandi? Che ne dici di usare le proprietà associate per CommandBindings? ha senso farlo nell'app Treeview di cui sto parlando? Sono un po 'sopraffatto dalle tante opzioni disponibili per implementarlo.

Qualcuno ha collegamenti, codice di esempio che fa questo genere di cose? Un'implementazione di riferimento può essere?

È stato utile?

Soluzione

Sono con te. Ho iniziato con

(ui) < - > (Xml)

dove xml è rappresentato come LINQy XElements, quindi ho ricevuto la notifica PropertyChange.

Ho quindi aggiunto alcune classi helper senza stato per aiutarmi a gestire xml (esporre proprietà, convalidare dati, ecc.). Raggrupperei XElements in ObservableCollections in modo da poterli legare a loro.

Leggi M-V-VM e ho deciso di convertire le mie classi di aiuto in ViewModels. I problemi: Le classi di supporto vivono nello spazio dei nomi del modello di dati che non sa nulla sull'interfaccia utente. Le classi di supporto sanno come convertire la riga del database in XElement, ViewModel non dovrebbe mai vederlo. Le classi di supporto si occupano di xml. ViewModel non dovrebbe saperlo o preoccuparsene.

Quindi sto davvero considerando di implementare

(ui) < - > (viewmodel) < - > (aiuto) < - > (Xml)

ma mi limito a sollevare gli eventi PropChange in aiuto solo per rilanciarli in viewmodel.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top