2011-07-27 10 views
9

Hola, estoy creando una aplicación wpf en la que una pantalla estará compuesta por diferentes controles de usuario para realizar diversas aplicaciones.Cómo utilizar los controles de usuario en WPF MVVM

Quería saber el proceso correcto para hacer esto en MVVM? ¿Debería el control de cada usuario tener su propio modelo de vista, o deberían unirse a las propiedades del modelo de Vista principal?

Para sugerir un buen enfoque. Gracias,

Respuesta

5

Cuando uso un UserControl paso los datos a través de DependencyProperties. Mi UserControls no tiene ViewModels. UserControls solo maneja los datos pasados ​​de una manera muy especial.

Pero si tengo una Vista que contiene algunas Sub-Vistas, prefiero tener para cada Sub-Vista un modelo propio. Este modelo lo vincularé a través de una propiedad del ViewModel de MainView.

Algunos ejemplos:

UserControl1, Código atrás:

public partial class UserControl1 : UserControl 
{ 
    public MyClass MyProperty 
    { 
     get { return (MyClass)GetValue(MyPropertyProperty); } 
     set { SetValue(MyPropertyProperty, value); } 
    } 

    public static readonly DependencyProperty MyPropertyProperty = 
     DependencyProperty.Register("MyProperty", typeof(MyClass), typeof(UserControl1), new UIPropertyMetadata(null)); 


    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
} 

public class MyClass 
{ 
    public int MyProperty { get; set; } 
} 

Y el uso de la vista, XAML:

<Window x:Class="Sandbox.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Sandbox="clr-namespace:Sandbox"> 
    <Grid> 
    <Sandbox:UserControl1 MyProperty="{Binding MyOtherPropertyOfTypeMyClassInMyViewModel, Mode=TwoWay}" /> 
    </Grid> 

espero que esto ayude

+0

hola Nunca he usado DependencyProperties. ¿Puede darme un enlace o explicar brevemente cómo un usuario debe usar una Propiedad de dependencia? ¿Debo hacer un tipo para un userControl y luego vincularlo a las diversas propiedades dentro de la vista? – ganeshran

+1

Agregué un simple ejemplo – WaltiD

+0

Gracias WaltiD intentaré este enfoque. ¿Puedo vincularlo también a un tipo definido por el usuario? – ganeshran

1

Buena pregunta, pero no creo que haya una respuesta directa.

que depende mucho de la forma de sus datos. Si los diferentes controles de usuario son diferentes puntos de vista sobre los mismos datos entonces no hay razón por la que no pueden compartir el mismo modelo de vista ... esa es una de las fuerzas motrices de MVVM - se puede dar el mismo modelo de vista de diferentes puntos de vista para mostrar la misma datos de diferentes maneras.

Pero, una vez más, si su ViewModel comienza a hincharse realmente y no hay demasiada superposición, divídala en ViewModels más pequeños. ¿Tal vez su ViewModel principal se convierta más en un administrador de ViewModel con una colección de ViewModels para distribuir a los diversos controles de usuario según corresponda?

+0

la suya es un intere solución de picadura. Trataré de implementarlo. Intenté usar varios modelos de vista, pero no pude lograr que se comunicaran entre sí. ¿Cree que el contexto de datos de control de cada usuario debe corresponder a un tipo personalizado que es una propiedad del modelo de vista principal? ¿Sería correcto según MVVM? – ganeshran

+0

sí - suena como un enfoque razonable – IanR

Cuestiones relacionadas