2010-09-10 11 views
5

¿cómo puedo datatemplate un UserControl con un ViewModel con un constructor NON-Empty?DataTemplate un ViewModel con un Constructor NO-Vacío?

public PersonViewModel(Person person) 
{ 
    _person= person; 
    // do some stuff       
} 

Encuadernación esto en Xaml se colgará como el Ctor no está vacío. Pero como uso las relaciones padre/hijo con ViewModels, tengo que pasar el objeto persona al constructor de ViewModel ...

¿Cómo lidiar con esa situación?

+1

Sus modelos de vista pueden tener cualquier diseño que desee. Es la Vista (por ejemplo, su UserControl) que debe ser un constructor predeterminado. Debe haber algo más incorrecto con su código. ¿Qué le parece publicar un ejemplo más completo (que excluya el View + XAML) – bitbonk

Respuesta

1
var person = new Person(); 
var viewModel = new PersonViewModel(person); 

var view = new EditPersonView(viewModel); // use overloaded constructor to inject DataContext 
// OR 
var view = new EditPersonView{ DataContext = viewModel }; 

Si realmente quiere instantiate la vista-modelo en XAML, entonces usted necesita para exponer una propiedad public Person Person y seguir con el constructor sin parámetros. Simplemente haz en el setter Person lo que hubieras hecho en el constructor. Por supuesto, ahora ha abierto una lata de gusanos porque también necesitará crear una instancia del Person en XAML con un constructor sin parámetros y pronto las cosas se pondrán muy feas ...

+0

como diga feo ... no hay una solución a la vista:/ – Elisabeth

+0

@Lisa ¿Puedo preguntar por qué quiere crear una instancia del modelo de vista del XAML? Esto es lo que hace las cosas desordenadas. – Jay

+4

porque me parece útil: ................................ Elisabeth

Cuestiones relacionadas