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 :

Binding d'une propriété d'un UniformGrid sur une propriété de la fenêtre. [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut Binding d'une propriété d'un UniformGrid sur une propriété de la fenêtre.
    Bonjour à tous,

    J'ai le code suivant:

    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
    <Window x:Class="test.MainWindow"
            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"
            xmlns:local="clr-namespace:test"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="5"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
    
            <StackPanel Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="Button_Click" />
            </StackPanel>
            <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" Width="5" ShowsPreview="True" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext" />
            <ListBox Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="lstDocuments" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="{x:Static local:MainWindow.MaxColumn  }"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Image Source="{Binding img}" Grid.Column="{Binding col}" Grid.Row="{Binding row}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
    
            </ListBox>
        </Grid>
    </Window>
    et

    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
    namespace test
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public int MaxColumn  { get; set; }
    
            public class toto
            {
                public BitmapImage img { get; set; }
            }
    
            public ObservableCollection<toto> lstElem { get; set; }  
    
            public MainWindow()
            {
                InitializeComponent();
    
                MaxColumn = 5;
    
                lstElem = new ObservableCollection<toto>();
    
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(@"D:\Pompotte 1.jpg");
                bitmap.EndInit();
    
                toto t = new toto();
                t.img = bitmap;
                lstElem.Add(t);
    
                bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(@"D:\Pompotte 2.jpg");
                bitmap.EndInit();
    
                toto t2 = new toto();
                t2.img = bitmap;
                lstElem.Add(t2);
    
                bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(@"D:\20150919 - Casper - 1.jpg");
                bitmap.EndInit();
    
                toto t3 = new toto();
                t3.img = bitmap;
                lstElem.Add(t3);
    
                lstDocuments.ItemsSource = lstElem;
    
            }
    Je voudrais faire binding de la propriété "Columns" du "UniformGrid" sur la propriété "MaxColumn " de ma classe principale pour pouvoir l'initialiser à partir de mon fichier ini.

    J'ai essayé plusieurs solutions mais j'ai toujours le message d'erreur comme de quoi il ne trouve pas ma propriété MaxColumn. Une idée ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    x:Static c'est pour des propriétés static, ce qui n'est pas le cas de ta propriété, et je pense qu'elle n'aurait aucun intérêt à l'être

    tu dois débuter en wpf, car tu n'a pas défini de datacontext (this.DataContext = this est parfois utilisé, même si ce n'est pas très MVVM friendly)
    normalement on essaye de ne pas faire du c# qui remplit les controles, mais les controles qui se bind (ItemsSource sur le listbox peut etre bindé)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    x:Static c'est pour des propriétés static, ce qui n'est pas le cas de ta propriété, et je pense qu'elle n'aurait aucun intérêt à l'être

    tu dois débuter en wpf, car tu n'a pas défini de datacontext (this.DataContext = this est parfois utilisé, même si ce n'est pas très MVVM friendly)
    normalement on essaye de ne pas faire du c# qui remplit les controles, mais les controles qui se bind (ItemsSource sur le listbox peut etre bindé)
    Débuter non mais je n'en fais pas assez souvent que pour progresser suffisamment, c'est parce que je le fais au forcing sinon je devrais développer ceci en VB6 ;-)

    Il m'arrive effectivement d'oublier le DataContext car je n'ai pas encore compris dans tout les cas les différences entre celui-ci et la propriété Source de certains composants.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    x:Static c'est pour des propriétés static, ce qui n'est pas le cas de ta propriété, et je pense qu'elle n'aurait aucun intérêt à l'être

    tu dois débuter en wpf, car tu n'a pas défini de datacontext (this.DataContext = this est parfois utilisé, même si ce n'est pas très MVVM friendly)
    normalement on essaye de ne pas faire du c# qui remplit les controles, mais les controles qui se bind (ItemsSource sur le listbox peut etre bindé)
    Oui pour le remplissage je vois ce que tu veux dire, c'est juste une fenêtre de test, au sinon ma les images de ma liste provienne d'une base de données. J'ai ici fait un truc simple juste pour tester mon affichage en colonne.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    wpf ca s'apprend, et ca peut prendre du temps, ca n'a rien à voir avec vb6
    en vb6 on fait telcontrol.telpropriété = tellevaleur, en wpf normalement on ne doit pas faire ca (même si y en a qui code en type vb6/winform)

    datacontext est une propriété de chaque controle, et elle héritée dans le sens arbre logique
    si le window a un datacontext défini tous les controles dessus ont le même
    sur un listbox (ou autre itemscontrol) une fois itemssource remplit tous les sous élément ont comme datacontext un élément de la collection
    etc...

    ensuite on bind sur des propriétés de ce qui est le datacontext, genre <listbox itemssource="{Binding telleProprieteDeTypeCollection}">
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    wpf ca s'apprend, et ca peut prendre du temps, ca n'a rien à voir avec vb6
    en vb6 on fait telcontrol.telpropriété = tellevaleur, en wpf normalement on ne doit pas faire ca (même si y en a qui code en type vb6/winform)

    datacontext est une propriété de chaque controle, et elle héritée dans le sens arbre logique
    si le window a un datacontext défini tous les controles dessus ont le même
    sur un listbox (ou autre itemscontrol) une fois itemssource remplit tous les sous élément ont comme datacontext un élément de la collection
    etc...

    ensuite on bind sur des propriétés de ce qui est le datacontext, genre <listbox itemssource="{Binding telleProprieteDeTypeCollection}">
    Certes cela s'apprend mais il faut justement en avoir le temps, surtout quand l'employeur ne compte pas en donner pour la formation. J'ai des bases en WPF pour devoir aussi apprendre à coder sur le tas en Xamarin Android. Mais je dois souvent déborder sur mon temps libre, en sachant qu'après journée de 8 heures au bureau, je suis également Papa, mari, photographe, auditeur et ferronnier (et donc plusieurs activités pro). Je trouve dommage d'avoir des réponses du genre "tu ne dois pas connaitre le WPF" alors que je n'ai montré ici qu'un code avec des images remplies en C# certes, mais surtout pour ne pas afficher le code permettant d'aller chercher les informations en DB, qui n'est pas utile à la compréhension de ma (bête) question. J'ai passé 3 heures à essayer de trouver mon erreur avant de poser ma question ici. Et de finalement trouver la réponse en analysant le code se trouvant sur un autre forum et en trouvant mon erreur (je parle ici de la deuxième, vu qu'il y avait un petit quelque chose supplémentaire qui manquait également).

    Du temps ou je passais des heures sur ce forum à essayer d'aider pour répondre aux questions du forum, je ne me serais jamais permis de répondre ce genre de phrase à un autre utilisateur.

    Je pense que dorénavant j'irai poser mes question ailleurs...
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je ne vois pas en quoi te dire que tu ne connais pas wpf est une insulte, si tu te sens rabaissé c'est subjectif car tu pensais surement être assez avancé dans l'apprentissage, mais non c'est objectif
    et il n'y a rien de mal à ne pas trop connaitre wpf
    moi je dis ca pour que ca t'amène à te dire que tu as surement loupé un truc et qu'il te reste des bases à apprendre

    en plus tu avoues toi même ne pas trop comprendre DataContext (j'ai pris le temps de l'expliquer), ce qui est la base de la base en wpf
    (et tenter x:Static au hasard ca dit aussi que tu ne sais pas ce que signifie static en c#)
    donc je confirmes que tu débutes en wpf, et vu que tu viens de vb6 tu es peut être nul en POO aussi, mais c'est pas un crime
    certes en improvisant tu auras un résultat, mais c'est pas connaitre un langage
    (si t'es photographe avec un peu de level tu dois comprendre qu'il y a du skill à prendre, et que ca peut prendre du temps ; le dev c'est pire)


    après ici on ne sait pas ce que les gens font avec leur code, si c'est pour un outil interne utilisé une fois je comprends qu'improviser sans maitriser peut suffire
    mais certains vendent des logiciels pourris faits par des développeurs incompétents, donc il vaut mieux leur dire de prendre le compétence
    on voit encore trop de sites avec une faille d'injection sql par exemple
    de plus c'est un forum pour professionnels, les étudiants et développeurs du dimanche sont acceptés mais ils doivent venir avec de la bonne volonté

    si tu n'arrives pas à encaisser ca, ca vient plus de toi
    car moi sur les forums quand j'ai une question sur un truc que je pensais comprendre, que sur la réponse la forme n'est pas là tout en ayant des pistes à creuser sur le fond, je remercie le pro d'avoir pris quelques minutes sur sa journée bien remplie (tu n'es pas le seul à avoir une vie remplie, pas la peine d'essayer de s'en venter, ni de s'en plaindre alors que ca doit être un choix) et je vais chercher les infos complémentaires
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    C'est sur que je suis débutant en POO avec 10 ans d'expérience en C++ ;-) enfin soit
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. [WPF]Binding d'une propriété contenu dans une propriété
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 23/11/2010, 19h51
  2. Bind d'une textbox d'une usercontrol sur une Dependency property
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 27/04/2010, 05h26
  3. Binding d'une variable déclaré en C# sur un Control
    Par Takumi dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 25/01/2010, 23h19
  4. [webflow] binding d'une propriétés de collection
    Par kaljerhom dans le forum Spring Web
    Réponses: 1
    Dernier message: 12/05/2009, 10h08
  5. Réponses: 3
    Dernier message: 07/03/2009, 12h56

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