IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Phone .NET Discussion :

BindableApplicationBar & TextBox [MVVM]


Sujet :

Windows Phone .NET

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut BindableApplicationBar & TextBox
    Bonjour à tous,

    J'ai un problème avec une TextBox, une BindableApplicationBar (et un Pivot).
    ma BindableApplicationBar (BAB) est placée sur ma page contenant les pivots. Les pivots contenant des usercontrols.
    Dans un de ces usercontrols se trouve ma TextBox.

    Le bouton sur ma BAB va envoyer mon texte (contenu de la TextBox) à un Webservice. J'ai bindé la propriété Text de ma TextBox sur mon ViewModel (celui de la page contenant le Pivot et BAB.

    Mon problème est que le focus de la propriété Text de la TextBox n'est pas propagée au clic sur le bouton de la BAB. Il faut d'abord que je clique ailleurs sur l'écran pour que la propriété soit mise à jour.
    Or si je met un bouton directement dans mon usercontrol (à l'intérieur de mon PivotItem), quand je saisis un texte puis appui sur ce bouton, la propriété Text est directement mise à jour.

    Ordre d'inclusion :
    Page (Bindée avec ViewModel) -> Pivot + BAB
    Pivot -> PivotsItem -> UserControl
    UserControl -> TextBox

    Y'a-t'il un moyen de contourner mon problème ?
    J'ai tenté de donner le focus à un autre élément avec l'évenement Click sur le bouton de ma BAB, mais l'évènement n'est déclenché qu'après ma Command, le MouseLeftButtonDown n'est pas appelé du tout.

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <phone:PhoneApplicationPage 
        x:Class="JooSport_Mobile.View.Activity.ActivityPane"
        [..]
        xmlns:p7c="clr-namespace:Phone7.Fx.Controls;assembly=Phone7.Fx"
        [..]
        DataContext="{Binding Activity_VM, Source={StaticResource Locator}}">
     
      <Grid x:Name="LayoutRoot">
        <controls:Pivot>
          <controls:PivotItem Header="Wall">
            <vma:Wall x:Name="Wall" />
          </controls:PivotItem>
        </controls:Pivot>
     
        <p7c:BindableApplicationBar x:Name="AppBar">
          <p7c:BindableApplicationBarIconButton
                x:Name="BABIB_Send"
                Text="{Binding Path=LocResources.Send, Source={StaticResource LocalizedStrings}}"
                Command="{Binding SendButton}"
                IconUri="/Resources/Icon/AppBarIcon/MessageSend_48x48.png" />
        </p7c:BindableApplicationBar>
     
      </Grid>
     
    </phone:PhoneApplicationPage>

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <UserControl x:Class="JooSport_Mobile.View.Activity.Wall"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        d:DesignHeight="480" d:DesignWidth="480">
     
        <Grid x:Name="LayoutRoot">
            <StackPanel>
                <TextBox x:Name="TB_Comm"
                    Text="{Binding Mode=TwoWay, Path=CommentTxt, BindsDirectlyToSource=True}"
                    InputScope="Text" />
                <Button Content="Envoyer" Command="{Binding SendButton}" />
            </StackPanel>
      </Grid>
    </UserControl>

    Un code simplifié pour illustrer le tout, car c'est sûrement pas très clair pour tout le monde ce que je viens de dire

    Merci d'avance de vos réponses/propositions.

    Mat
    Pensez au et un petit vote si mon post vous a été utile .

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Franchement l'utilisation du MVVM à tout prix ne me plait pas beaucoup.
    MVVM est un pattern qui doit être utilisé pour se simplifier la vie. Si ce n'est pas le cas c'est pour moi une perte de temps et cela devient antipattern.
    Dans ton cas par exemple tu peux resoudre ton soucis en une ligne de code :

    Dans le click de ton bouton de ta BAB par exemple :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void Click_BABButton(object sender, EventArgs e )
    {
      var text = this.TB_Comm.Text;
      // envoyer du code
      MainViewModel.Send(text);
    }

    Alors oui il y a du code coté View mais tellement peu que cela ne nuira pas à la maintenance du code.
    Qu'en penses-tu ?
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Merci Samuel,

    Ca marche parfaitement ,

    en adaptant un petit peu, pour éviter de mettre la classe ViewModel en static
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void BABIB_Send_Click(object sender, System.EventArgs e) {
      ((ActivityPane_ViewModel)DataContext).SendComment(Wall.TB_Comm.Text);
    }
    Je ne suis pas contre un peu de code côté View tant que ça restait du comportement visuel, mais je vais devoir déroger à ma règle . J'étais sur cette piste de toute manière. Je voulais faire le RaiseProperty de ma Command directement dans le code behind, sans avoir pensé à appeler la méthode directement, shame on me.
    L'inconvénient (mineur) de ceci, est que je ne passe plus par mon Locator.

    Le MVVM est assez intéressant, mais il y a plein de petits cas comme ça qui font qu'il est ch*ant à conserver en place.
    Il m'a été imposé donc j'essaye de faire avec un maximum, mais mon responsable commence à se rendre compte aussi que ce n'est pas aussi simple d'utilisation que sur le papier.

    Merci pour la réponse rapide,

    Mathieu de JooSport qui t’embête aussi par mail
    Pensez au et un petit vote si mon post vous a été utile .

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Oui Mathieu de l'accélérateur !

    J'en profite pour redonner le lien vers le programme de l'accélérateur si cela intéresse quelqu'un. C'est un programme qui permet de bénéficier d'un accès gratuit au MarketPlace, à des ressources sur WP et eventuellement d'un coach :

    http://msdn.microsoft.com/fr-fr/windowsphone/default
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Sauvegarde dans TextBox des logons utilisés
    Par stephane93fr dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/10/2005, 11h00
  2. [VB6] [Interface] ScrolBar & TextBox
    Par DarkVader dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/10/2002, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo