7
votes

Prism 6 DélégationCommand Observez CodeProperty Code

Bonjour bonne journée Je ne suis que neuf avec le modèle de design WPF et MVVM et j'ai beaucoup appris des blogs et des vidéos de Sir Brian Lagunas à Prism .. mais je veux juste demander une question noob..qui Mon code informatique fonctionne pour moi ... Toute aide est très appréciée merci. Voici mon code:

mon modèle de vue strong> p> xxx pré>

myModel strong> p>

déclarée à une autre Fichier de classe p> xxx pré>

vue strong> Code XAML P>

<Window x:Class="Prism6Test.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:myVM="clr-namespace:Prism6Test.ViewModel"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <myVM:Person x:Key="mainVM"/>
    </Window.Resources>
<Grid DataContext="{StaticResource mainVM}">
        <TextBox HorizontalAlignment="Left" Height="23" Margin="217,103,0,0" TextWrapping="Wrap" Text="{Binding MyPerson.FirstName,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>
        <TextBox HorizontalAlignment="Left" Height="23" Margin="217,131,0,0" TextWrapping="Wrap" Text="{Binding MyPerson.Lastname,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>
        <Button Content="Button" Command="{Binding updateCommand}" HorizontalAlignment="Left" Margin="242,159,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>
</Window>


5 commentaires

Quel est le bouton?


Publier une boîte de message "Hola".


D'accord. Maintenant je le vois. Quel est le problème du code? Vous ne voyez pas quelque chose dans les zones de texte?


Il est contraigné à un accessoire de DélégationCommand. et il devrait exécuter la méthode "exécutée". Mais avant d'exécuter le bouton est désactivé jusqu'à ce que les deux boîtes de texte soient remplies THX pour votre commentaire @jenshorstmann


Il est contraigné à un accessoire de DélégationCommand. et il devrait exécuter la méthode "exécuter" .. mais avant d'exécuter le bouton est désactivé jusqu'à ce que les deux boîtes de texte soient remplies ... mais dans mon cas ça ne marche pas .. thx pour votre commentaire @jenshorstmann


3 Réponses :


4
votes

1) Vous ne pouvez pas utiliser de datamodel complexe comme si vous le souhaitez, essayez donc

public Person()
    {
        MyPerson = new myPErson();
        updateCommand = new DelegateCommand(Execute, CanExecute);
    }


1 commentaires

@Neil marque cette réponse comme solution s'il vous plaît, s'il vous a aidé



3
votes

D'abord, je dois dire quelque chose à propos de votre nommée. Nommez vos classes claires. Appelez votre ViewModel STRY> E.G. personviewModel code> ou juste viewModel code> Lorsque votre application n'est pas si gros et non personne code>, car personne code> est évidemment le Modèle fort>. De plus, myPerson code> est un très mauvais nom, car il est très similaire à votre autre personne code> personne code> et que vous devriez Pascalcase tes noms de classe.

Maintenant à votre code fort>. Je ne sais rien de prisme code> alors mon code dépend du modèle MVVM code> uniquement sans le support des bibliothèques de prisme. P>

Je veux d'abord changer le modèle strong> personne code>. La classe semble très facile dans mon code (utilise simplement les propriétés de l'automobile): p> xxx pré>

the personviewmodel code> est une petit titre plus complexe car il implémente le INOTIFYPROPERTYCHANGED code> interface. J'utilise également le très commun RelaisCommand que vous pouvez trouver dans le lien sous la réponse acceptée. P>

<Window ...>
    <Window.Resources>
        <wpfTesst:PersonViewModel x:Key="ViewModel" />
    </Window.Resources>
    <Grid DataContext="{StaticResource ViewModel}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBox Grid.Row="0" TextWrapping="Wrap" Text="{Binding Person.FirstName, UpdateSourceTrigger=PropertyChanged}" />
        <TextBox Grid.Row="1" TextWrapping="Wrap" Text="{Binding Person.LastName, UpdateSourceTrigger=PropertyChanged}" />
        <Button Grid.Row="2" Content="Button" Command="{Binding UpdateCommand}" CommandParameter="{Binding Person}"/>
    </Grid>
</Window>


4 commentaires

Merci pour votre suggestion Sir @Jens Horstmann..et ça va m'aider à améliorer mon codage..out de la curiosité Je veux juste utiliser la bibliothèque de prisme et que j'étudie. Puis-je vous demander un lien, réserver pour ma référence monsieur? pour une étude future..plusez s'il vous plaît ... merci beaucoup


@Neil Faites ce que vous voulez avec vos liens = p


HAHA


Stackoverflow.com/questions/1405739/... < / a> Je pense que vous pouvez vous-même Google vous-même. Je ne trouve pas le tutoriel que j'avais.



0
votes

Voir le code XAML

    xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
    prism:ViewModelLocator.AutowireViewModel="True"


0 commentaires