2012-03-06 26 views
17

Soy un programador de WPF novato. Estoy tratando de agregar algo de estructura a mi código: tanto User Controls como MVVM.¿Caliburn.Micro funciona muy bien con los controles de usuario?

Investigando aquí, he encontrado que people recommend Caliburn.Micro. Por otro lado, he encontrado algunas quejas here y elsewhere sobre Caliburn.Micro no está jugando muy bien con UserControls.

Así que mi pregunta es: ¿Caliburn.Micro funciona muy bien con los controles de usuario?

Respuesta

36

Sí, Caliburn.Micro se juega muy bien con los controles de usuario. Es un marco obstinado, pero no al punto de forzarte por un camino de desarrollo particular. Como sugieren las respuestas a las preguntas vinculadas, siempre puede usar un enlace antiguo WPF simple si tiene algún problema en particular.

De hecho, no permitiría que esos dos enlaces lo detuvieran para nada, el primero es describir una forma de enlazar propiedades separadas a un único control de usuario, y la solución es válida. Una mejor solución sería probablemente usar un ItemsControl con un DataTemplate personalizado, y luego crear una colección de DTO en su modelo de vista que contenga los nombres y valores de las propiedades.

El segundo enlace indica cómo si crea una vista (UserControl) y crea una instancia de la vista en XAML, y desea vincularla a un modelo de vista, entonces se llama vista primero, y tiene que Caliburn.Micro decir que el modelo de vista es que se unen a:

<UserControl ... 
    cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" /> 

lo tanto, esto conceptualmente se puede considerar como un modelo de vista/vista en lugar de un control de usuario con las propiedades de dependencia, etc.

de hecho, Descubrirá que cuando utiliza Caliburn.Micro, probablemente use cada vez menos UserControl s para realizar la composición de la vista. Esto se debe a que es muy fácil crear piezas de UI reutilizables usando modelos de vista, vistas y el primer enfoque del modelo de visualización.

Cuando tiene un ContentControl en una vista con el mismo nombre que una propiedad de modelo de vista en su modelo de vista principal, entonces Caliburn.Micro ubicará la vista del modelo de vista correspondiente, lo inyectará en el ContentControl y lo vinculará el modelo de vista/vista.

Por ejemplo:

public class MyParentViewModel : Screen 
{ 
    public MenuViewModel MenuViewModel { get; set; } 

    public DetailsViewModel DetailsViewModel { get; set; } 

    public MyParentViewModel() 
    { 
    this.MenuViewModel = new MenuViewModel(); 
    this.DetailsViewModel = new DetailsViewModel(); 
    } 
} 

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" /> 
    <ColumnDefinition Width=".8*" /> 
    </Grid.ColumnDefinitions> 

    <ContentControl Grid.Column="0" x:Name="MenuViewModel" /> 
    <ContentControl Grid.Column="1" x:Name="DetailsViewModel" /> 

</Grid> 
+0

comenzando con Caliburn y acaba de llegar a través de su post muy útil - ... podría ampliar un poco sobre el uso de controles de usuario ahora tanto ... afaics una vista va a ser una usercontrol ¿no? thxvm –

+2

Sí, con Caliburn.Micro no utilizará los controles de usuario en el sentido de controles de usuario con propiedades de dependencia, creando instancias de los controles directamente desde otra ventana/control de usuario, etc. – devdigital

+0

bien ... pero aún estará en la casa, diga , una grilla en un usercontrol (con todo el comportamiento personalizado en el viewmodel/xaml) y la carga dinámicamente en un ContentControl a través de Caliburn.Micro? (Solo quiero comprobar que no me estoy perdiendo nada). Mucho más de nuevo. –

Cuestiones relacionadas