Pregunta

chicos Hy!

Actualmente estoy trabajando en un pequeño proyecto WPF usando MVVM a través del marco Onyx.

Mi arquitectura CurrentView es la siguiente:

<DockPanel>
    <Menu DockPanel.Dock="Top" Background="#cecece">
        <!-- Menu -->
    </Menu>

    <Grid>
        <views:TranslationView x:Name="translationView" />
    </Grid>
</DockPanel>

La pregunta que ahora tengo es cómo poner en práctica la relación entre los dos ViewModels. Yo actualmente, básicamente, sólo tener la TranslationView tiene su propio modelo de vista sin ningún vínculo con el padre modelo de vista.

El problema es que quiero ser capaz de abrir algún archivo a través de la MainView y luego analizar el contenido y los muestra en la TranslationView. ¿Hay una manera recomendada de hacer esto?

pensé en usar sólo la TranslationViewModel como una propiedad en el MainViewModel y luego usarlo como DataContext para el TranslationView pero poco parece ir en contra del modelo de Onyx para definir el modelo de vista a través de un tipo (no un objeto) de referencia.

¿Fue útil?

Solución

Onyx no tiene un "modelo para definir el modelo de vista a través de un tipo (no un objeto) de referencia". La propiedad adjunta ViewModel se puede asignar una referencia de objeto. De hecho, esta propiedad es un tipo de objeto y utiliza la coacción para cambiar una instancia de tipo en una instancia de objeto del tipo especificado. Esto es sólo una conveniencia. Eres libre de simplemente asignar una referencia de objeto creado en la forma que desee.

Al igual que la mayoría de las preguntas, hay cualquier número de maneras de resolver su problema. La solución se menciona pero descartó porque se pensaba que iba en contra de diseño de Onyx es una que podría funcionar, pero me duda en utilizar, simplemente porque crea más estrechos. Otra solución sería utilizar el patrón Evento Agregator para la comunicación entre los puntos de vista de un modo desconectado. O se podría utilizar un enfoque más orientado al servicio. Por ejemplo, me defino por lo general un servicio IApplication que se interpone en donde normalmente se accede a Application.Current en un diseño fuertemente acoplado. Se podría proporcionar una propiedad en este servicio para mantener el contenido del archivo cargado, y exponer INotifyPropertyChanged en el servicio para permitir que el TranslationViewModel saber que la propiedad ha cambiado.

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