Pregunta

Tengo una aplicación de Windows WPF en el que estoy usando Caliburn.Micro. La principal ventana de la vista / modelo de vista es manejado por Caliburn.Micro. Una de sus botones aparece una nueva ventana de diálogo que utiliza una vista diferente modelo de vista.

En este diálogo Tengo un contenedor (cuadro de lista y algunos controles de filtro) que yo quiero hacer en un control reutilizable para que pueda incluirlo en otros cuadros de diálogo. Para ello he extraído de vista del modelo de vista de diálogo y el código correspondiente y ha creado una nueva visión y modelo de vista. Esta buena todas las miradas.

El problema es que ahora de nuevo en el diálogo Tengo un DockPanel con un gran espacio vacío donde necesito el control reutilizable para ir.

Desde el diálogo de modelo de vista OnInitalize () pude crear el modelo de vista de control reutilizable, pero no sé cómo conseguirlo de vista en DockPanel de la vista de diálogo.

Para crear el diálogo desde la ventana principal del modelo de vista utilizo WindowManager (). ShowDialog () para mostrar el modelo de vista para el diálogo y Caliburn.Micro se encarga de la creación de la vista. ¿Hay alguna manera de especificar en XAML del diálogo que se va a incrustar la vista para el control reutilizable y tienen Caliburn la vista adecuada / modelo de vista?

O voy al respecto por el camino equivocado?

¿Fue útil?

Solución

Si usted tiene una propiedad en su modelo de vista de diálogo que es otro tipo de vista del modelo, y se agrega una ContentControl a la vista de diálogo que lleva el nombre de la misma ya que esta propiedad, entonces Caliburn.Micro automáticamente inyecte la vista que se corresponde con su propiedad tipo de vista del modelo en el marcador de posición ContentControl, y de vinculación que la vista del modelo tipo a la vista de forma automática también. ¿Es esto lo que quieres decir? Algo así como:

// Dialog View Model
private MyReusableControlViewModel myReuseableControl;
public MyReusableControlViewModel MyReuseableControl
{ 
   get { return this.myReuseableControl; }
   set { this.myReuseableControl = value;  NotifyOfPropertyChanged(...); }
}

// Dialog View Model Constructor
public DialogViewModel()
{
  this.MyReuseableControl = new MyReusableControlViewModel();
}

// Dialog View
<DockPanel>
  ...
  <ContentControl x:Name="MyReusableControl" />
</DockPanel>

Por supuesto, lo ideal es que querría para inyectar las dependencias del modelo de vista de diálogo (en este caso MyReusableControlViewModel) y el trabajo contra las abstracciones dentro del modelo de vista de diálogo, en lugar de tipos concretos.

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