Pregunta

Estoy trabajando en una aplicación WPF que tiene una vista de árbol que representa un XML. Cargo el XML en el XDocument, luego ato el TreeView a este objeto.

Ahora usando el patrón MVVM , I desea proporcionar un ViewModel encima de XDocument . ¿Cuáles son algunas de las cosas que debo implementar en la clase ViewModel?

Estoy pensando en

  1. RoutedCommands que se unen a los comandos ContextMenu en TreeView para permitir agregar nodo, eliminar nodo, modificar nodo, etc.
  2. Lógica para modificar atributos y nombres de nombres en la vista.

¿Voy en la dirección correcta? ¿Qué más debo hacer para que sea más limpio, modular al mismo tiempo fácil de entender?

¿Debería usar RoutedCommands o implementar la interfaz ICommand y crear mis comandos? ¿Qué tal el uso de propiedades adjuntas para CommandBindings? ¿Tiene sentido hacerlo en la aplicación de vista de árbol de la que estoy hablando? Estoy un poco abrumado por las muchas opciones disponibles para implementar esto.

¿Alguien tiene enlaces, código de muestra que hace este tipo de cosas? ¿Puede ser una implementación de referencia?

¿Fue útil?

Solución

Estoy contigo. Empecé con

(ui) < - > (xml)

donde xml se representa como LINQy XElements, así que recibí una notificación de PropertyChange.

Luego agregué algunas clases auxiliares sin estado para ayudarme a lidiar con xml (exponer propiedades, validar datos, etc.). Agruparía XElements en ObservableCollections para poder vincularlos.

Leí sobre M-V-VM y decidí convertir mis clases de ayuda en ViewModels. Problemas: Las clases auxiliares viven en el espacio de nombres del modelo de datos que no sabe nada sobre la interfaz de usuario. Las clases auxiliares saben cómo convertir la fila de la base de datos en XElement, ViewModel nunca debería ver eso. Las clases de ayuda tratan con xml. ViewModel no debería saberlo o importarle.

Así que en realidad estoy considerando implementar

(ui) < - > (modelo de vista) < - > (ayudante) < - > (xml)

pero me niego a generar eventos de PropChange en helper solo para volver a crearlos en viewmodel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top