Comment puis-je accéder à mon ViewModel de code derrière
Je ne comprends pas comment je peux créer une commande pour créer une MVVM cliquable rectangle. Voici mon code:
<Rectangle x:Name="Color01" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="10,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100" MouseDown="Color_MouseDown" />
<Rectangle x:Name="Color02" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="115,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
<Rectangle x:Name="Color03" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="220,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
<Rectangle x:Name="Color04" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="325,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
Sur mon premier rectangle, vous pouvez le voir j'ai créé un code derrière événement. D'abord je ne sais pas comment accéder à mon ViewModel du code derrière. Deux c'est pas vraiment MVVM.
public partial class MainWindow : Window
{
///<summary>
///Initializes a new instance of the MainWindow class.
///</summary>
public MainWindow()
{
InitializeComponent();
Closing += (s, e) => ViewModelLocator.Cleanup();
}
private void Color_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//So what ???
}
}
J'ai juste besoin d'être en mesure de changer une valeur booléenne simple stockées dans une liste stockée dans mon viewModel quand quelqu'un clique sur mon rectangle. Pourquoi c'est si compliquer à faire avec MVVM?
var rect = sender as Rectangle
et puis faire ce que vous voulez, même si c'est très mauvais de conception et de vous doit par tous les moyens d'utiliser la liaison de données et de lier la couleur d'un champ, plutôt que de faire cela. Apprendre et utiliser les abstractions vous sont donnés plutôt que de les combattre.Et j'ai le rectangle... alors que faire? L'obtention de l'expéditeur n'est pas le problème. Après cela, j'ai besoin de mettre à jour mon boolean valeur stockée dans une liste stockée dans mon viewModel.
OriginalL'auteur Bastien Vandamme | 2014-07-20
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas trop difficile. Tout d'abord, créez une instance de votre ViewModel à l'intérieur de la Fenêtre de votre XAML:
Vue XAML:
Après cela, vous pouvez
System.De Windows.L'interactivité.InvokeCommandAction
de traduire votre événement à une commande:Vue XAML:
Maintenant, dans ton ViewModel, mettre en place un
ICommand
et laDelegateCommand
mise en œuvre de lier à cet événement:ViewModel:
OriginalL'auteur Yuval Itzchakov
Dans MVVM vous ne devriez pas accéder à votre modèle d'affichage de code derrière, la vue de modèle et de vue sont ignorants les uns des autres un ici finit la lecture 🙂
Au lieu de cela, vous pouvez joindre le EventToCommand comportement de votre contrôle. Cela vous permet de lier un événement dans le contrôle d'une commande dans le contexte de données. Voir msdn commandes tutoriel ici.
Si vous êtes désespérés pour faire cela, vous pouvez accéder aux commandes de contexte de données de la propriété et de le jeter à votre point de vue type de modèle pour donner accès à l'intérieur.
OriginalL'auteur kidshaw
Réponse rapide. Cela peut en aider d'autres et
OriginalL'auteur Charitha Goonewardena