Veo dos maneras de conectar el ViewModel a la Vista. Uno está en XAML y el otro a través de inyección de dependencias en el código subyacente.Conectando el ViewModel a la Vista en Silverlight
¿Qué método es más preferible? Prefiero el método xaml porque no quiero ningún código en el código, ¿pero hay algún problema con uno sobre el otro?
<navigation:Page x:Class="MyNamespace.MyViewModel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModel="clr-namespace:MyNameSpace.MyViewModel"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Title="ViewModel Page" >
<navigation:Page.Resources>
<ViewModel:MyViewModel x:Key="ViewModel"></ViewModel:MyViewModel>
</navigation:Page.Resources>
<Grid x:Name="LayoutRoot" Background="White"
DataContext="{StaticResource ViewModel}">
</Grid>
</navigation:Page>
O
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
namespace MyNamespace
{
public partial class MyView : Page
{
public MyView()
{
InitializeComponent(MyViewModel viewModel);
this.DataContext = viewModel;
}
}
}
Hmm ... gracias por el enlace. Lo estoy leyendo ahora. Creo que necesito leerlo unas cuantas veces más porque no estoy obteniendo algo. Shawn dice: "En ambos métodos, no me gusta la adherencia de la vista al modelo de vista. Además, ambos implican una relación de uno a uno que, si bien es el caso común, no es siempre el caso. " pero con View-First, las muchas vistas se pueden unir a una máquina virtual. ¿Podría una vista estar vinculada a más de una máquina virtual? hmmm ... de nuevo, supongo que si tu V fuera una cuadrícula simple, podría querer vincularla a diferentes máquinas virtuales. –
Hasta ahora, soy partidario de mantener una relación uno-a-uno entre Vs y VMs. Lo cual no significa que estoy en contra de una jerarquía. Es decir, una vista puede contener sub-vistas, cada una con su propia máquina virtual, y esto parece haber funcionado bastante bien. –
En nuestra aplicación, tenemos una vista de cuadrícula estándar que solo muestra filas de datos. Los datos pueden ser de diferentes ViewModels, por lo que mantenerlo uno a uno no tiene sentido para nosotros. No tiene sentido tener múltiples vistas de cuadrícula cuando todas son iguales excepto por los datos que contiene. –