Je peux voir deux façons de raccorder ViewModel à la vue. L'un est en XAML et l'autre à travers l'injection de dépendance dans le code derrière.Accrochage du ViewModel à la vue dans Silverlight
Quelle méthode est la plus préférable? Je préfère la méthode xaml parce que je ne veux pas du tout de code dans le code, mais y a-t-il des problèmes avec l'un sur l'autre?
<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>
OU
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 .. merci pour le lien. Je le lis maintenant. Je pense que je dois le lire encore quelques fois parce que je ne reçois rien. Shawn dit: «Dans ces deux méthodes, j'ai tendance à ne pas aimer le caractère collant de la vue pour le modèle de vue.Ces deux impliquent une relation un-à-un qui, bien que le cas courant, n'est pas toujours le cas " mais avec View-First les nombreuses vues peuvent être databound à une VM. Une vue peut-elle être liée à plusieurs machines virtuelles? hmmm .. encore une fois, je suppose que si votre V était une simple grille pour vouloir l'avoir lié à différentes machines virtuelles. –
Jusqu'à présent, je suis un fan de garder une relation one-to-one entre Vs et VMs. Ce qui ne veut pas dire que je suis contre une hiérarchie. En d'autres termes, une vue peut contenir des sous-vues possédant chacune sa propre machine virtuelle, ce qui semble fonctionner assez bien. –
Dans notre application, nous avons une vue grille standard qui affiche simplement les lignes de données. Ces données peuvent provenir de ViewModels différents, donc ne pas avoir de sens pour nous. Il est inutile d'avoir plusieurs vues de grille lorsqu'elles sont toutes identiques à l'exception des données qu'il contient. –