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 Presentation Foundation Discussion :

[XAML -MVVM] Simulation d'un affichage 16x2, indexation


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut [XAML -MVVM] Simulation d'un affichage 16x2, indexation
    Bonjour,

    J'ai réalisé une vue simulant un affichage 16 caractères sur 2 lignes. Plus 3 boutons.

    Nom : 2022-01-18 13_09_02-Window.png
Affichages : 212
Taille : 22,1 Ko

    Chaque caractères possèdent une barre de soulignement afin de simuler la position du curseur sur le caractère modifiable.

    J'essaie de respecter le MVVM, et je suis partie sur un montage simple de Textblox pour les caractères et des rectangles pour le curseur.

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <Viewbox Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Stretch="Uniform" Margin="-2">
          <TextBlock Text="{Binding LBL_L1C1_Text,FallbackValue='0'}"
                           Foreground="Blue"
                           FontWeight="Bold"/>
     </Viewbox>
    <Viewbox Grid.Row="1" Grid.Column="0" Stretch="Uniform" Margin="0,-3,0,0">
         <Rectangle Fill="Blue"
                          Height="50" Width="200"
                          Visibility="{Binding CUR_L1C1_Visibility}"/>
    </Viewbox>
    Ce code est donc multiplier 32 fois. Pas très propre je trouve.

    En entrée j'ai 2 lignes de texte et l'indication de l'emplacement du curseur avec 2 variables (Colonne et ligne). Mon code est en VB.net, mais un exemple en C# me conviendrais parfaitement.

    J'aimerais simplifier cela pour l'utilisation avec des contrôles indexés ou des tableaux de contrôles, auriez-vous une piste, je continue à chercher de mon côté.

    J'ai une 1ere piste en créant un controlUser d'un Digit avec le Curseur puis l'appeler 32 fois dans un tableau type Listview (GridView) afin de lui passer une ObservableCollection.

    Si vous avez une piste, merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    ca serait mieux avec un itemcontrol dans lequel tu glisse un itemtemplate
    et un itempanel pour avoir ta représentation sur deux lignes (voir plus si tu veux)
    si tu me file ton projet je te fais ca
    c'est super simple

    tu pourrais meme faire un truc plus tordu en utilisant un radiobouton pour le soulignement comme ca tu simplifie encore plus l'utilisation

  3. #3
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par ikeas Voir le message
    ca serait mieux avec un itemcontrol dans lequel tu glisse un itemtemplate
    et un itempanel pour avoir ta représentation sur deux lignes (voir plus si tu veux)
    si tu me file ton projet je te fais ca
    c'est super simple

    tu pourrais meme faire un truc plus tordu en utilisant un radiobouton pour le soulignement comme ca tu simplifie encore plus l'utilisation
    Bonjour,

    Désolé de répondre si tardivement, je n'ai pas eu de temps à moi ces temps-ci, je quitte l'entreprise donc pas mal de chamboulement.
    Il faut que je monte un projet de test pour vous présenter cette fonctionnalité, je ne peux pas vous envoyer le projet complet. Mais à titre personnel, j'en serai vraiment ravi d'avoir un exemple là-dessus. J'essaie de vous faire sa pour demain.

    Merci encore

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Source VirtualDisplay
    Bonjour,

    Voici les sources de la partie virtualdisplay.
    J'ai donc ajouté dans le MainWindow de quoi tester l'afficheur, attention pas de test avant d'envoyer les données.

    4 paramètres:
    -Pour le texte:
    Ligne 1
    Ligne 2
    -Pour le curseur
    Colonne
    Ligne

    Les sources:
    TestAfficheur.zip



    virtualdisplay essaie de respecter le MVVM, pas le MainWindow, j'ai fait sa rapidement.

    Merci beaucoup

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    désolé pour le retard
    en plus c'est du vb et ça fait un moment que j'en ai plus fait lol

    en fonction de ton code
    tu mets ça en lieu et place de la grid dans ton deuxième border
    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
    <ItemsControl ItemsSource="{Binding Items}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Viewbox Grid.Row="0"
                                             Grid.Column="0"
                                             Grid.RowSpan="2"
                                             Stretch="Uniform"
                                             Margin="-2">
                                        <TextBlock Text="{Binding Text,FallbackValue='0'}"
                                                   Foreground="Blue"
                                                   FontWeight="Bold" />
                                    </Viewbox>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

    dans ton mvvm tu mets une objservable collection qui contient des objects qui contiennent un text et une valeur pour dire s'ils sont select un object de ce type

    avec
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Class Item
        Inherits VM_Base
     
        Private _Text As String = "0"
        Public Property Text As String
            Get
                Return _Text
            End Get
            Set(value As String)
                _Text = value
                OnPropertyChanged()
            End Set
        End Property
    End Class

    et si tu veux optimiser tu remplaces dans le

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       Private _Items As ObservableCollection(Of Item) = New ObservableCollection(Of Item)
        Public ReadOnly Property Items As ObservableCollection(Of Item)
            Get
                Return _Items
            End Get
        End Property
    dans ton VM_VirtualDisplay

    et si tu veux optimiser tu remplaces dans le
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TextBlock Text="{Binding Text,FallbackValue='0'}"
                                                   Foreground="Blue"
                                                   FontWeight="Bold" />

    par un radiobuton

    ça aurait été en C# j'aurais corrigé ton code complet mais en vb c'est plus complexe

    quoi qu'il en soit
    • pour ajouter tes items tu les colles dans le Items
    • pour gérer la sélection tu mets un is selected dans item bindé sur le isChecked du radiobutton



    -tu peux même replacer le <UniformGrid />
    par un <stackpanel orientation="horizontal" /> si tu préfères ça restera sur une ligne et tu définis les tailles de tes deux éléments au besoin pour pas mélanger ligne haute et ligne basse

  6. #6
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour ikeas,


    Ha oui désolé c'est du VB.net, historiquement l'entreprise était en vb6...

    Je code en C# mes applications annexe, mais les gros pavés sont en vb.net

    Merci pour ton code, je vais analyser cela avec attention à titre perso, car il me reste que 2 jours chez mon employeur actuel, je leur transmettrais une fois que j'aurai compris et essayé.



    Aillant découvert le WPF depuis peu et uniquement en auto formation autour de ce dont j'avais besoin, il me manque parfois des bases. Mais j'aime beaucoup les possibilités offertes, même si le pattern MVVM, ajoute énormément de ligne de code.

    D'ailleurs je me suis fait un logiciel en C# pour lire le XAML et décortiquer le formalisme que je me suis imposé sur les noms des "binding" (TXT_MONOBJET_Text ou TXT_MONOBJECT_Background etc.) ainsi que les valeurs textuelles par défaut et créer ainsi automatiquement le Modèle et la Vue-Modèle (Property) en VB.net ou C# (au cas ou) et le fichier de langue, pour gagner du temps, les copier coller Rrrrr.

    Merci encore

Discussions similaires

  1. Rafraichir Affichage DBGrid - indexation unique
    Par juju1988 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/07/2013, 09h10
  2. Réponses: 6
    Dernier message: 31/01/2013, 23h17
  3. Affichage page index non trouvée
    Par marcello06 dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2008, 21h46
  4. [Tableaux] affichage Mysql index
    Par gjhffd dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2007, 11h10
  5. probleme affichage z-index
    Par Tempotpo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/07/2006, 16h34

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