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 :

WPF problème affichage listview [Débutant]


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut WPF problème affichage listview
    Bonjour,
    je tourne en rond depuis quelques temps avec un problème d'affichage en wpf et je ne parviens pas à trouver une solution à mon problème.

    Je dois créer une programme qui propose à l'utilisateur de saisir des champs de connexion à une base de donnée Mysql hébergée sur un serveur. Une autre fenêtre affiche ensuite une colonne qui affiche le nom des tables contenues dans la base de données et une autre colonne avec une checkbox pour chaque table. Si l'utilisateur coche la checkbox, une troisième colonne doit afficher les champs contenus dans la table correspondante (idem pour chaque table) et si il décoche la checkbox les champs correspondants doivent disparaître.
    Je suis complètement perdue quant à cette troisième colonne...je ne parviens pas à trouver comment afficher/désafficher les champs des tables correspondantes. J'ai tellement lu et essayé de trucs à gauche et à droite (que je n'arrive pas à faire fonctionner...) que j'ai le cerveau en compote et je ne vois même plus quoi faire.
    J'espère que vous pourrez m'éclairer et me suggérer une méthode à suivre,
    d'avance merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Il y a plusieurs façons de faire, en voila une simple :

    Le XAML :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:WpfApplication1="clr-namespace:WpfApplication1"
            Title="MainWindow"
            Height="350"
            Width="525">
        <Window.Resources>
            <WpfApplication1:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
        </Window.Resources>
     
     
     
        <Grid Background="Gray">
     
            <DataGrid ItemsSource="{Binding DBList}"
                      AutoGenerateColumns="False"
                      CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding DBName}"
                                        IsReadOnly="True"></DataGridTextColumn>
                    <DataGridCheckBoxColumn Binding="{Binding ShowDetail,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn>
                    <DataGridTemplateColumn IsReadOnly="True">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ListView ItemsSource="{Binding Tables}"
                                          Visibility="{Binding ShowDetail,Converter={StaticResource BoolToVisibilityConverter}}"></ListView>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
     
        </Grid>
    </Window>

    La classe MainWindows :
    Code C# : 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
     
    public partial class MainWindow
        {
     
            public List<DBData> DBList { get; set; }
     
            public MainWindow()
            {
                InitializeComponent();
     
                DBList = new List<DBData>
                    {
                        new DBData{DBName = "Table1",ID = 1,ShowDetail = false, Tables = new List<string>{"Table1", "Table2", "Table3"}},
                        new DBData{DBName = "Table2",ID = 2,ShowDetail = false, Tables = new List<string>{"Table4", "Table5", "Table6"}}
                    };
     
                DataContext = this;
     
            }
     
     
        }
     
     
        public class DBData : INotifyPropertyChanged
        {
            private bool _showDetail;
            public int ID { get; set; }
     
            public string DBName { get; set; }
     
            public bool ShowDetail
            {
                get { return _showDetail; }
                set
                {
                    if (value.Equals(_showDetail)) return;
                    _showDetail = value;
                    OnPropertyChanged("ShowDetail");
                }
            }
     
            public List<string> Tables { get; set; }
            public event PropertyChangedEventHandler PropertyChanged;
     
            [NotifyPropertyChangedInvocator]
            protected virtual void OnPropertyChanged(string propertyName)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    Et le converter :

    Code C# : 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
     
    public class  BoolToVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                if ((bool) value)
                    return Visibility.Visible;
     
                return Visibility.Collapsed;
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

    Voilà le principe : le datagrid binde vers une liste de type DBData, qui contient une ligne pour chaque DB.

    La colonne checkbox binde vers une propriété ShowDetail de la classe DBData. Quand la propriété est changée, il y a un OnPropertyChange pour que l’évènement se propage.

    Dans la dernière colonne, la propriété visibility de la listview qui affiche les noms des tables est aussi bindée sur la propriété ShowDetail. Mais comme ShowDetail est un booléen et que la propriété visibility est un enum Visibility, je dois passer par un converter pour changer le booléen en Visibility.

  3. #3
    Membre habitué
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Merci GuruuMeditation pour la réponse et les explications! Tu viens d'illuminer ma journée

    J'essaye d'intégrer tout ça dans mon programme et je te tiens au courant.

  4. #4
    Membre habitué
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    Voilà, ça marche!

    Par contre j'avais encore un affichage bizarre dans la listview: "WpfApplication.Tables" au lieu du contenu de la liste.
    C'est dû à quoi, tu sais comment je peux choisir les propriétés des éléments que je veux afficher?

    Sinon j'ai remplacé cette satanée listview par un autre datagrid...d'un point de vue esthétique ce n'est pas vraiment pas ça mais ça affiche ce que je veux, donc ça roule!

    Encore un grand merci

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    WpfApplication.Tables est quelle type d’objet? Une liste?

  6. #6
    Membre habitué
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut
    oui c'est une liste. Je voudrais afficher la propriété "Nom" des objets qu'elle contient.

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

Discussions similaires

  1. Problème affichage ListView (LazyAdapter)
    Par GJuubz dans le forum Composants graphiques
    Réponses: 10
    Dernier message: 02/02/2014, 20h40
  2. Problème Affichage Listview
    Par hjyf84 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/12/2013, 12h29
  3. Problème affichage ListView
    Par frAydjwe dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 19/05/2011, 17h01
  4. problème affichage par colonne (listview)
    Par skysee dans le forum C#
    Réponses: 2
    Dernier message: 19/09/2007, 13h32
  5. Problème affichage ListView
    Par sorcer1 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/01/2007, 15h52

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