Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Développement Mobile > Windows Phone
Windows Phone Forum d'entraide sur le développement d'applications compatibles avec Windows Phone 7.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2012, 12h10   #1
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 570
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France

Informations professionnelles :
Activité : Watch R&D Engineer & Apprenti .NET

Informations forums :
Inscription : août 2003
Messages : 1 570
Points : 1 130
Points : 1 130
Envoyer un message via MSN à DotNET74
Par défaut Gestion de l'état d'affichage

Hello,

J'ai une page avec un TextBox dont le XAML est le suivant:

Code :
1
2
3
4
5
6
7
<TextBox Text="{Binding Path=TextBoxLoginValue,Mode=TwoWay}" Grid.Row="1" Grid.Column="1" KeyUp="TextBox_KeyUp">
  <Interactivity:Interaction.Triggers>
    <Interactivity:EventTrigger EventName="TextChanged">
      <Interactivity:InvokeCommandAction Command="{Binding Path=TextBoxLoginTextChanged}"></Interactivity:InvokeCommandAction>
    </Interactivity:EventTrigger>
  </Interactivity:Interaction.Triggers>
</TextBox>
La commande du ViewModel est la suivante:

Code :
1
2
3
4
5
6
7
8
9
10
11
private void CheckParameters()
{
  if(this.TextBoxLoginValue==null||this.TextBoxLoginValue.Trim()==string.empty)
  {
    this.ButtonSaveIsEnabled = false;
   }
  else
  {
    this.ButtonSaveIsEnabled = true;
  }
}
Le xaml du bouton est comme suit:

Code :
1
2
3
4
5
6
7
<Button Content="{Binding Path=ButtonSaveContent}" IsEnabled="{Binding Path=ButtonSaveIsEnabled,Mode=TwoWay}" Width="250">
  <Interactivity:Interaction.Triggers>
    <Interactivity:EventTrigger EventName="Click">
      <Interactivity:InvokeCommandAction Command="{Binding Path=ButtonSaveClick}"/>
    </Interactivity:EventTrigger>
  </Interactivity:Interaction.Triggers>
</Button>
Le code fonctionne bien mais la vue ne se met pas à jour excepté lorsque je fais du pas à pas !!!!

Quelqu'un saurait pourquoi ?

Merci
__________________
La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

Si vous aimez ma réponse, cliquez sur la main verte Merci
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 13h42   #2
GuruuMeditation
Expert Confirmé
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
.Net Architect
Inscription : octobre 2010
Messages : 1 353
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : .Net Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 1 353
Points : 2 870
Points : 2 870
Envoyer un message via MSN à GuruuMeditation
Le databinding de la textbox ne se fait que lorsqu'elle perd le focus.

Ce serait peut-être parce que, en pas à pas, la textbox perd le focus à un moment, donc le databinding se fait bien et donc le bouton devient actif?
__________________
Microsoft MVP : Visual C#

MCPD - Windows Phone Developer
MCPD - Windows Developer 4

http://www.guruumeditation.net

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 14h17   #3
same66
Membre régulier
 
Inscription : décembre 2010
Messages : 87
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 87
Points : 77
Points : 77
Salut DOTNET74,

Juste pour info, tu as cette méthode que tu devrais utiliser dans ton exemple
http://msdn.microsoft.com/fr-fr/libr...llorempty.aspx

Tu n'aurais plus qu'à remplacer par :

Code :
1
2
3
if(String.IsNullOrEmpty(this.TextBoxLoginValue)){
    //whatever you like
}
a+
same66 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 14h26   #4
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 570
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France

Informations professionnelles :
Activité : Watch R&D Engineer & Apprenti .NET

Informations forums :
Inscription : août 2003
Messages : 1 570
Points : 1 130
Points : 1 130
Envoyer un message via MSN à DotNET74
@samee66

Merci pour l'info....

@guru

Comment faire pour contourner ce problème ?
__________________
La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

Si vous aimez ma réponse, cliquez sur la main verte Merci
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 14h56   #5
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 570
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France

Informations professionnelles :
Activité : Watch R&D Engineer & Apprenti .NET

Informations forums :
Inscription : août 2003
Messages : 1 570
Points : 1 130
Points : 1 130
Envoyer un message via MSN à DotNET74
Bon j'ai tenté de passer par un CommandParameter afin de transmettre la valeur de ma TextBox mais y rien dedans.

Déclaration de la commande:

Code :
TextBoxLoginTextChanged = new GalaSoft.MvvmLight.Command.RelayCommand<string>(param => CheckParameters(param));
Code de CheckParameters:

Code :
1
2
3
4
5
6
7
8
9
10
11
private void CheckParameters(string Message)
{
  if(this.TextBoxLoginValue==null||this.TextBoxLoginValue.Trim()==string.empty)
  {
    this.ButtonSaveIsEnabled = false;
   }
  else
  {
    this.ButtonSaveIsEnabled = true;
  }
}
Et le xaml pour finir:

Code :
1
2
3
4
5
6
7
<TextBox x:Name="TextBoxLogin" Text="{Binding Path=TextBoxLoginValue,Mode=TwoWay}" Grid.Row="1" Grid.Column="1" KeyUp="TextBox_KeyUp">
  <Interactivity:Interaction.Triggers>
    <Interactivity:EventTrigger EventName="TextChanged">
      <Interactivity:InvokeCommandAction Command="{Binding Path=TextBoxLoginTextChanged}" CommandParameter="{Binding ElementName=TextBoxLogin, Path=Text}"></Interactivity:InvokeCommandAction>
    </Interactivity:EventTrigger>
  </Interactivity:Interaction.Triggers>
</TextBox>
__________________
La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

Si vous aimez ma réponse, cliquez sur la main verte Merci
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 17h11   #6
Nathanael Marchand
Rédacteur/Modérateur

 
Avatar de Nathanael Marchand
 
Homme Nathanael Marchand
Expert .Net So@t
Inscription : octobre 2008
Messages : 3 521
Détails du profil
Informations personnelles :
Nom : Homme Nathanael Marchand
Âge : 26
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Expert .Net So@t
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 3 521
Points : 7 961
Points : 7 961
Hum... J'ai envie de dire que c'est un faux problème en fait
De ce que je comprends, tu veux invoquer une commande qui lance la vérification du contenu pour griser ou non ton bouton. Eh bien, c'est prendre le problème à l'envers.

Le constructeur de ta relaycommand peut prendre deux arguments en paramètre: le premier est un délégué de l'execution de l'action, le second est pour savoir si l'action peut s'executer. Plus besoin d'avoir un booléen pour savoir si le bouton doit etre grisé ou pas!

J'ai écrit un exemple dans mon tutoriel:
http://nathanaelmarchand.developpez..../?page=IV#LVII
Nathanael Marchand est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2012, 22h20   #7
GuruuMeditation
Expert Confirmé
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
.Net Architect
Inscription : octobre 2010
Messages : 1 353
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : .Net Architect
Secteur : Conseil

Informations forums :
Inscription : octobre 2010
Messages : 1 353
Points : 2 870
Points : 2 870
Envoyer un message via MSN à GuruuMeditation
Citation:
Envoyé par Nathanael Marchand Voir le message
Le constructeur de ta relaycommand peut prendre deux arguments en paramètre: le premier est un délégué de l'execution de l'action, le second est pour savoir si l'action peut s'executer. Plus besoin d'avoir un booléen pour savoir si le bouton doit etre grisé ou pas!
C'est plus clean. Mais le plus gros problème est que le binding se fait lorsque le Textbox perd le focus (pas de UpdateSourceTrigger=PropertyChanged en WP7). Il faut alors une solution pour provoque le binding comme : http://stackoverflow.com/questions/4...hone-7-textbox
__________________
Microsoft MVP : Visual C#

MCPD - Windows Phone Developer
MCPD - Windows Developer 4

http://www.guruumeditation.net

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”
(Edsger W. Dijkstra)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 19h15   #8
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 570
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France

Informations professionnelles :
Activité : Watch R&D Engineer & Apprenti .NET

Informations forums :
Inscription : août 2003
Messages : 1 570
Points : 1 130
Points : 1 130
Envoyer un message via MSN à DotNET74
Bon pour finir....

J'utilise la messagerie de MVVM Light afin d'envoyé un message avec argument lorsque la TextBox est modifiée côté View et ViewModel est abonné à ce message et traite alors en conséquence ....

ça fonctionne et reste découplé

Donc merci à tous pour votre aide
__________________
La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

Si vous aimez ma réponse, cliquez sur la main verte Merci
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 21h17   #9
Nathanael Marchand
Rédacteur/Modérateur

 
Avatar de Nathanael Marchand
 
Homme Nathanael Marchand
Expert .Net So@t
Inscription : octobre 2008
Messages : 3 521
Détails du profil
Informations personnelles :
Nom : Homme Nathanael Marchand
Âge : 26
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Expert .Net So@t
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 3 521
Points : 7 961
Points : 7 961
Pour le coup, je pense que c'est un abus de découplage la
Nathanael Marchand est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h24.


 
 
 
 
Partenaires

Hébergement Web