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

Silverlight Discussion :

Rotation et Zoom avec MVVM


Sujet :

Silverlight

  1. #1
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut Rotation et Zoom avec MVVM
    Bonjour,
    Je travail sur une application Silverlight (une galerie photo) pré-existante, que je dois remodeler pour qu'elle respecte le modèle MVVM. Elle dispose d'une fonction de zoom et de rotation sur l'image. Comment gère t'on le ScaleTransform et le RotateTransform avec le pattern MVVM (au niveau du binding) ? J'utilise MVVM Light Toolkit et je développe sous Visual Studio 2010.
    Merci pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Je suis pas sur de bien comprendre, mais de ce que j'en déduis tout va se passer dans la vue exactement comme "avant" la refonte.
    A moins que les valeurs du scale transform et du rotate soit nécessaire ailleurs je vois pas pourquoi elle se retrouverai dans le modèle.

  3. #3
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Tout ce qui est purement design n'a pas pour vocation d'être contenu dans ton ViewModel.

    Si par contre tu as besoin de stocker les valeurs des transformations, depuis Silverlight 4, il est possible de binder sur les propriétés d'un DependencyObject.
    Tu pourras donc faire quelque chose comme ça :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ScaleTransform ScaleX="{Binding Path=ZoomX, Mode=TwoWay}" />

  4. #4
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut
    J'ai tenté la rotation avec ce code :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Image Name="iconeRotation" Margin="10 0 0 0" Source="Images/rotation-icone-gauche.png" Canvas.Left="702" Canvas.Top="502" Cursor="Hand" Width="30" Height="30" ToolTipService.ToolTip="Pivoter l'image">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseLeftButtonDown">
                                <cmd:EventToCommand Command="{Binding RotateImageCommand}" PassEventArgsToCommand="True"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                        <Image.RenderTransform>
                            <RotateTransform Angle="{Binding Path=AngleIcone, Mode=TwoWay}" CenterX="{Binding Path=CentreXIcone, Mode=TwoWay}" CenterY="{Binding Path=CentreYIcone, Mode=TwoWay}" />
                        </Image.RenderTransform>
                    </Image>

    L'image pivote bien une première, puis plus rien ne se passe ensuite. Je dois sans doute mal le gérer côté ViewModel...

  5. #5
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Mai 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Mai 2011
    Messages : 45
    Par défaut
    Problème résolu, et ça venait bien du MainViewModel... Enfin à cause d'une erreur toute bête.
    Je mets le code de mon ViewModel pour ceux que ça intéresse (le code xaml dans le message précédent fonctionne bien)

    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    // Déclaration des variables
    private int _angleIcone = 0;
    public int AngleIcone
    {
         get { return _angleIcone; }
         set
         {
           if (_angleIcone != value)
           {
              _angleIcone = value;
              RaisePropertyChanged("AngleIcone");
             }
          }
    }
     
    private int _centreXIcone = 0;
    public int CentreXIcone
    {
      get { return _centreXIcone; }
      set
      {
         if (_centreXIcone != value)
         {
            _centreXIcone = value;
            RaisePropertyChanged("CentreXIcone");
          }
       }
    }
     
    private int _centreYIcone = 0;
    public int CentreYIcone
    {
       get { return _centreYIcone; }
       set
           {
             if (_centreYIcone != value)
             {
                _centreYIcone = value;
                RaisePropertyChanged("CentreYIcone");
              }
            }
    }
     
    public RelayCommand RotateImageCommand { get; private set; }
     
    // Métohdes
    public MainViewModel()
    {
         if (IsInDesignMode)
         {
            // Code runs in Blend --> create design time data.
          }
          else
          {
                  RotateImageCommand = new RelayCommand(RotateImageCommand_Click);
          }
    }
     
    public void RotateImageCommand_Click()
    {
          AngleIcone -= 90;                                       
          CentreXIcone = 15;                                      
          CentreYIcone = 15;
    }
    Mon erreur se situait dans la méthode public void RotateImageCommand_Click() à cause d'une erreur de recopie, j'avais mis AngleIcone = -90 au lien de AngleIcone -= 90;

  6. #6
    Membre actif Avatar de freezer08
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Par défaut
    Cool, tant mieux ! Merci d'avoir partagé ta solution

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

Discussions similaires

  1. probleme avec le zoom avec une modification d'image
    Par yoyo59650 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/02/2006, 09h22
  2. zoom avec un formulaire?
    Par ft035580 dans le forum Access
    Réponses: 9
    Dernier message: 18/02/2006, 01h27
  3. [Rotations] Rotations Locales/Globales avec Quaternions
    Par Clorish dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 24/05/2005, 16h41
  4. Zoom avec du TJPEG
    Par Thylia dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/06/2002, 16h03

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