Menu

Faire une recherche dans une liste pour afficher des éléments précis [Résolu]

Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
- - Dernière réponse : Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
- 27 mai 2019 à 20:14
Bonjour, la question doit paraitre un peu bête mais cela fait plusieurs jours que j'essaye de résoudre mon problème sans succès. J'ai une liste de séries dans une classe bibliothèque, je veux la parcourir pour retournée certain élément de cette liste dans une autre liste appelée "SerieParticulier". Pour cela j'ai crée dans ma bibliothèque une fonction qui parcours ma liste puis si les genres (représenté par un int) sont égaux, ajoute la série à la liste ... Cependant je voit vraiment pas d'où vient l'erreur ( même si je me doute que c'est une erreur très bête) car au final ma liste contient l'élément (j'ai vérifié avec un point d'arrêt) mais ne l'affiche pas ...

Voici comment est composer une serie

   public Serie(String nom, String date_de_sortie, bool en_cours, int genre, String image, int nb_saison, string resumer)
        {
            this.Nom = nom;
            this.DateDeSortie = date_de_sortie;
            this.EnCours = en_cours;
            this.Genre = genre;
            this.Images = image;
            this.Resumer = resumer;
            this.NbDeSaison = nb_saison;
        }

        public Serie()
        {
        }








 public class BiblioSerie
    {
        public List<Serie> ListSerie { get { return GetAll(); } }

        public List<Serie> GetAll()
        {
            return new List<Serie>()
            {
            new Serie("Grey's Anatomy","27/03/2005",true,1, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,
            "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année" +
            " en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir " +
            "de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition" +
            " fait rage..."),
            new Serie("Lucifer", "26/01/2016", false,5, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent" +
            " de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume" +
            " pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron" +
            " d'un nightclub baptisé Lux."),
            new Serie("The 100", "19/03/2014",true,4, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse" +
            " nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et" +
            " à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants" +
            " redescendent sur Terre."),
            new Serie("The Walking Dead", "20/03/2011",true,8, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après" +
            " une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de" +
            " femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal" +
            " faire face à ce nouveau monde.")
            };
        }
        public List<Serie> GenreParticulier( int g)
        {
            var ListSerieParticuliere =new List<Serie>();
            for (int i=0; i<ListSerie.Count; i++)
            {
                if (ListSerie[i].Genre == g)
                {
                    ListSerieParticuliere.Add(ListSerie[i]);
                }
            }
            return ListSerieParticuliere;
        }






   public GenreAction()
        {

            InitializeComponent();
        }

        public BiblioGenre BiblioGenre { get; set; } = new BiblioGenre();
        public BiblioSerie BiblioSerie { get; set; } = new BiblioSerie();
        public List<Serie> SerieParticulier { get; set;} = new List<Serie>();
        


        private void GenreAction_Loaded(object sender, RoutedEventArgs e)
        {
            SerieParticulier= BiblioSerie.GenreParticulier(1);
        }
    }







 <Grid>
       
              <StackPanel>

            <ScrollViewer  Height="375" VerticalScrollBarVisibility="Visible"  HorizontalScrollBarVisibility="Hidden">
                <WrapPanel VerticalAlignment="Center" HorizontalAlignment="Center">
                    <ListBox ItemsSource="{Binding SerieParticulier, ElementName=Action}" Name="List_pour_Serie" Width="Auto" Height="Auto" Margin="10" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <Button >
                                        <Button.Template>
                                            <ControlTemplate>
                                                <StackPanel>
                                                    <TextBlock Text="{Binding Nom}"></TextBlock>
                                                    <Image Name="ImageSerie" Height="100" Width="100" Source="{Binding Images}"/>
                                                </StackPanel>
                                            </ControlTemplate>
                                        </Button.Template>
                                    </Button>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </WrapPanel>
            </ScrollViewer>
        </StackPanel>

    </Grid>









Merci d'avance pour votre aide.
Afficher la suite 

5 réponses

Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350
0
Merci
Bonsoir

Y'a plein de chose qui ne vont pas dans tes codes.

ici
        public List<Serie> ListSerie { get { return GetAll(); } }
        
        public List<Serie> GetAll()
        {
            return new List<Serie>()
            {
            new Serie("Grey's Anatomy","27/03/2005",true,1, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,
            "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année" +
            " en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir " +
            "de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition" +
            " fait rage..."),
            new Serie("Lucifer", "26/01/2016", false,5, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent" +
            " de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume" +
            " pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron" +
            " d'un nightclub baptisé Lux."),
            new Serie("The 100", "19/03/2014",true,4, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse" +
            " nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et" +
            " à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants" +
            " redescendent sur Terre."),
            new Serie("The Walking Dead", "20/03/2011",true,8, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après" +
            " une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de" +
            " femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal" +
            " faire face à ce nouveau monde.")
            };
        }


A chaque fois que tu veux accéder à ta liste tu en crées une nouvelle, ça perd du temps et ça "bouffe" des ressources, autant la créer une fois pour toute.

Un truc du genre
        public List<Serie> ListSerie { get { mesSeries;} }
        
        private List<Serie> mesSeries = new List<Serie>()
            {
            new Serie("Grey's Anatomy","27/03/2005",true,1, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,
            "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année" +
            " en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir " +
            "de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition" +
            " fait rage..."),
            new Serie("Lucifer", "26/01/2016", false,5, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent" +
            " de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume" +
            " pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron" +
            " d'un nightclub baptisé Lux."),
            new Serie("The 100", "19/03/2014",true,4, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse" +
            " nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et" +
            " à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants" +
            " redescendent sur Terre."),
            new Serie("The Walking Dead", "20/03/2011",true,8, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après" +
            " une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de" +
            " femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal" +
            " faire face à ce nouveau monde.")
            };
        }

Là ta liste est crée une seule fois (un seul appel à new à la construction de ton instance).

Toujours dans ce bout de code, construire des string avec des + est fait une opération de concaténation, donc du temps et des ressources, quand on travaille avec des variables OK, mais directement avec du texte, c'est gâcher...
"Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition fait rage..."
Même résultat, plus rapide, moins de ressources.

Enfin ta liste en dur dans le code, c'est pas terrible, si tu veux ajouter une série, faut recompiler.
Tu devrais (dois même) utiliser un fichier, une base de données, csv, xml, json, "vraie" base de données tu as l'embarras du choix.





Ici tu déclarer un var et tu veux retourner une liste, c'est moyen, pas sûr que ton soucis vienne de là néanmoins ton code à l'air bon à part ce point
        public List<Serie> GenreParticulier( int g)
        {
            var ListSerieParticuliere =new List<Serie>()
            for (int i=0; i<ListSerie.Count; i++)
            {
                if (ListSerie[i].Genre == g)
                {
                    ListSerieParticuliere.Add(ListSerie[i]);
                }
            }
            return ListSerieParticuliere;
        }


Ça pourrait être plus rapide, à écrire et à exécuter avec une requête Linq
        public List<Serie> GenreParticulier( int g)
        {
                  return ListSerie.Where(s => s.Genre == g).ToList();
        }


Pour ton genre, à la place d'un int, tu pourrais utiliser un enum, ça rend le code plus lisible.



Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Hamster18
Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
-
D'accord, j'ai modifiée ces points, cependant le problème reste ...
Commenter la réponse de Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350
0
Merci
<ListBox ItemsSource="{Binding SerieParticulier, ElementName=Action}"
Pourquoi y a t il un ElementName ici?
Tu es bindé sur un contrôle qui s’appelle Action?
Hamster18
Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
-
C'est le nom de ma window, j'ai fait
        x:Name="Action"
Dans la balise window de ma page.
Commenter la réponse de Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350
0
Merci
Ha, mais le code code que tu as montré plus haut
   public GenreAction()
        {

            InitializeComponent();
        }

Nomme la fenêtre GenreAction, tu as 2 fenêtres?

Hamster18
Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
-
Comment ça 2 fenêtres ?
Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350 -
Tu dis que dans ton xaml ta fenêtre s'appelle "Action", et le code que tu postes, montre le code behind d'une fenêtre qui s'appelle "GenreAction"
Hamster18
Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
-
Le nom de ma window est "GenreAction" (c'est celui que je lui ai donnée quand j'ai crée ma window), dessus je lui ai rajouter un nom avec
x:Name="Action"
pour dire lors du binding où sont binder les donnée, mais je pense pas que l'erreur vienne de la car j'ai un autre binding sur cette page marquant exactement la même chose
            <StackPanel DataContext="{Binding BiblioGenre.ListGenre[0], ElementName=Action}">


Et ce binding la fonctionne. Je pensais (peut-être à tord) comme je modifie ma liste de serie il faudrait peut être implémenter BiblioSerie par " INotifyPropertyChanged " et mettre la liste en ObservableCollection ?
Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350 -
Déjà c'est pas comme ça qu'il faut faire, mais en plus y'a toutes les chances que ce soit ça le problème.
Imagine que je t'écrive une lettre mais que je l'envoie à Cobaye18, un cobaye c'est quasiment pareil qu'un hamster, pourtant la lettre, tu ne la recevras pas.

Il est tard et je suis fatigué, je reviendrais te faire un exemple demain, ou samedi.
Mais afin qu'il soit le plus pertinent possible, peux tu expliquer le résultat que tu souhaites?
Commenter la réponse de Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350
0
Merci
Bonjour

sans indications de ta part, je fais comme je le sens

Dans un projet de test, j'ai ajouté une fenêtre qui s'appelle GenreAction
XAML
<Window x:Class="Test_WPF_Cs.GenreAction" <!--son nom c'est bien "GenreAction"-->
        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_WPF_Cs"
        mc:Ignorable="d"
        Title="GenreAction" Height="450" Width="800">
    <Grid>
        
    </Grid>
</Window>

PS le compilateur n'aime pas le commentaire à cet endroit là

Et le code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Test_WPF_Cs
{
    /// <summary>
    /// Logique d'interaction pour GenreAction.xaml
    /// </summary>
    public partial class GenreAction : Window
    {
        public GenreAction()
        {
            InitializeComponent();
        }
    }
}


Ensuite un enum, avec une description de chaque valeur
    public enum Genre
    {
        Defaut = 0,//faut toujours mettre une valeur par défaut à 0, car un énum est en fait un int, qui s'initialise à 0 
        DrameMedical = 1, //j'ai regardé la description de Grey's Anatomy sur allocine
        ScienceFiction = 4,//ideme avec The 100
        Fantastique = 5, //idem avec Lucifer
        Epouvante = 8,//Idem avec The walking dead
        Action = 2, //y'avait pas de série Action dans ton exemple alors j'ai choisi 2
    }


une classe qui permet de binder les descriptions des enums
    /// <summary>
    /// Permet d'afficher dans un combobox la description d'une énumération
    /// https://stackoverflow.com/questions/58743/databinding-an-enum-property-to-a-combobox-in-wpf
    /// </summary>
    public class EnumerationExtension : MarkupExtension
    {
        private Type _enumType;

        /// <summary>
        /// Classe permettant de binder facilement les valeurs d'une énumération en affichant la description
        /// </summary>
        /// <param name="enumType"></param>
        public EnumerationExtension(Type enumType)
        {
            if (enumType == null)
                throw new ArgumentNullException("enumType");

            EnumType = enumType;
        }

        private List<int> valeursExclues = new List<int>();
        /// <summary>
        /// Permet d'exclure des valeurs
        /// </summary>
        public string ValeursExclues
        {
            set { valeursExclues = value.Split(';').Select(x => Convert.ToInt32(x)).ToList(); }
        }



        public Type EnumType
        {
            get { return _enumType; }
            private set
            {
                if (_enumType == value)
                    return;

                var enumType = Nullable.GetUnderlyingType(value) ?? value;

                if (enumType.IsEnum == false)
                    throw new ArgumentException("Type must be an Enum.");

                _enumType = value;
            }
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var enumValues = Enum.GetValues(EnumType);

            

            return (
              from object enumValue in enumValues
              where !valeursExclues.Contains((int)enumValue)
              select new EnumerationMember
              {
                  Value = enumValue,
                  Description = GetDescription(enumValue)
              }).ToArray();
        }

        private string GetDescription(object enumValue)
        {
            var descriptionAttribute = EnumType
              .GetField(enumValue.ToString())
              .GetCustomAttributes(typeof(DescriptionAttribute), false)
              .FirstOrDefault() as DescriptionAttribute;


            return descriptionAttribute != null
              ? descriptionAttribute.Description
              : enumValue.ToString();
        }

        public class EnumerationMember
        {
            public string Description { get; set; }
            public object Value { get; set; }
        }
    }


Puis une classe Série, avec des types cohérent, une date c'est pas un string....
    public class Serie : INotifyPropertyChanged
    {
        public Serie(string Nom, DateTime Date_de_sortie, bool En_cours, Genre Genre, string Image, int Nb_saison, string Resume)
        {
            this.Nom = Nom;
            this.DateDeSortie = Date_de_sortie;
            this.EnCours = En_cours;
            this.Genre = Genre;
            this.Images = Image;
            this.Resume = Resume;
            this.NbDeSaisons = Nb_saison;
        }

        public Serie()
        {
        }

        private string nom;
        /// <summary>
        /// Nom de la série
        /// </summary>
        public string Nom
        {
            get { return nom; }
            set
            {
                if (nom != value)
                {
                    nom = value;
                    GenerePropertyChanged("Nom");
                }
            }
        }

        private DateTime date;
        /// <summary>
        /// Date de sortie de la série
        /// </summary>
        public DateTime DateDeSortie
        {
            get { return date; }
            set
            {
                if (date != value)
                {
                    date = value;
                    GenerePropertyChanged("DateDeSortie");
                }
            }
        }

        private bool enCours;
        /// <summary>
        /// Série en cours
        /// </summary>
        public bool EnCours
        {
            get { return enCours; }
            set
            {
                if (enCours != value)
                {
                    enCours = value;
                    GenerePropertyChanged("EnCours");
                }
            }
        }

        private Genre genre;
        /// <summary>
        /// Genre de la série
        /// </summary>
        public Genre Genre
        {
            get { return genre; }
            set
            {
                if (genre != value)
                {
                    genre = value;
                    GenerePropertyChanged("Genre");
                }
            }
        }

        private string images;
        /// <summary>
        /// Chemins des images
        /// </summary>
        public string Images
        {
            get { return images; }
            set
            {
                if (images != value)
                {
                    images = value;
                    GenerePropertyChanged("Images");
                }
            }
        }

        private string resume;
        /// <summary>
        /// Résumé de la série
        /// </summary>
        public string Resume
        {
            get { return resume; }
            set
            {
                if (resume != value)
                {
                    resume = value;
                    GenerePropertyChanged("Resume");
                }
            }
        }

        private int nbSaisons;
        /// <summary>
        /// Nombre de saisons
        /// </summary>
        public int NbDeSaisons
        {
            get { return nbSaisons; }
            set
            {
                if (nbSaisons != value)
                {
                    nbSaisons = value;
                    GenerePropertyChanged("NbSaisons");
                }
            }
        }


        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void GenerePropertyChanged(string Propriete)
        {
            if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete));
        }

        #endregion
    }


Une classe biblioserie
    public class BiblioSerie : INotifyPropertyChanged
    {
        public List<Serie> ListSerie { get; } = new List<Serie>()
        {
            new Serie("Grey's Anatomy", DateTime.Parse("27/03/2005"),true,Genre.DrameMedical, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15, "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année  en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir  de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition  fait rage..."),
            new Serie("Lucifer", DateTime.Parse("26/01/2016"), false,Genre.Fantastique, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent  de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume  pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron  d'un nightclub baptisé Lux."),
            new Serie("The 100", DateTime.Parse("19/03/2014"),true,Genre.ScienceFiction, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse  nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et  à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants  redescendent sur Terre."),
            new Serie("The Walking Dead", DateTime.Parse("20/03/2011"),true,Genre.Epouvante, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après  une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de  femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal  faire face à ce nouveau monde.")
        };

        private Genre filtre;
        /// <summary>
        /// Filtre sur le genre
        /// </summary>
        public Genre Filtre
        {
            get { return filtre; }
            set
            {
                if (filtre != value)
                {
                    filtre = value;
                    GenerePropertyChanged("Filtre");
                    GenerePropertyChanged("SeriesFiltrees");//prévient le binding que cette propriété aussi a changé
                }
            }
        }

        public List<Serie> SeriesFiltrees
        {
            get { return ListSerie.Where(s => s.Genre == filtre).ToList(); }
        }

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void GenerePropertyChanged(string Propriete)
        {
            if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Propriete));
        }

        #endregion
    }


Modification du code behind
    public partial class GenreAction : Window
    {
        BiblioSerie biblioSerie;
        public GenreAction(BiblioSerie BiblioSerie)
        {
            InitializeComponent();

            biblioSerie = BiblioSerie;//si tu en as besoin ailleurs dans le code behind

            this.DataContext = biblioSerie;//le datacontexte de la fenetre est cette instance de BiblioSerie
        }
    }


Dans la fenêtre qui appelle GenreAction
            BiblioSerie biblioSerie = new BiblioSerie();
            GenreAction genreAction = new GenreAction(biblioSerie);
            genreAction.Show();


Modification du xaml
<Window x:Class="Test_WPF_Cs.GenreAction" 
        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_WPF_Cs"
        mc:Ignorable="d"
        Title="GenreAction" Height="450" Width="800"
        DataContext="{Binding}">
    <!--là on prévient et on force le fait que la fenêtre est bindée-->

    <Grid DataContext="{Binding .}">
        <!--là on spécifie au grid que son datacontexte est le même que celui du contrôle qui le contient-->

        <TextBlock Text="Toutes les séries" Margin="346,20,341,357"/>
        <ListBox DataContext="{Binding .}" ItemsSource="{Binding ListSerie}" Margin="0,40,0,252">
            <!--là on spécifie à la ListBox que son datacontexte est le même que celui du contrôle qui le contient, et que sa source d'items est la propriété ListSerie-->
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Nom}" Margin="1"/>
                        <TextBlock Text="{Binding DateDeSortie, StringFormat=d}" Margin="1"/>                        
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <TextBlock Text="Filtrer les séries du genre" Margin="180,195,450,189"/>
        <ComboBox  SelectedValue="{Binding Filtre}" ItemsSource="{Binding Source={local:Enumeration {x:Type local:Genre}}}" DisplayMemberPath="Description" SelectedValuePath="Value" Margin="346,195,291,189"/>
            <!--là, on binde la liste déroulante du comboBix sur la liste des descriptions de l'énumération et la valeur séléctionnée est bindée sur la propriété filtre-->
        <ListBox DataContext="{Binding .}" ItemsSource="{Binding SeriesFiltrees}" Margin="0,251,0,41">
            <!--là on spécifie à la ListBox que son datacontexte est le même que celui du contrôle qui le contient, et que sa source d'items est la propriété SeriesFiltrees-->
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Nom}" Margin="1"/>
                        <TextBlock Text="{Binding DateDeSortie, StringFormat=d}" Margin="1"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </Grid>
</Window>



Ce qui donne


Hamster18
Messages postés
42
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
12 juin 2019
-
Un grand merci ! Merci de votre aide !
Commenter la réponse de Whismeril
Messages postés
13451
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 juin 2019
350
0
Merci
de rien
Commenter la réponse de Whismeril