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

Développement Windows Discussion :

Combobox, Binding, ObservableCollection


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Par défaut Combobox, Binding, ObservableCollection
    Bonjour ! Chers lecteurs plus adroits que moi, peut-être pourriez vous m'aider.

    J'ai une question/un problème :

    J'ai un TextBox dans lequel mon utilisateur est sensé rentrer un chemin vers un fichier :

    XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Grid.Column="0" Grid.Row="1" Text="{Binding FilePath, UpdateSourceTrigger=PropertyChanged}" Margin="5, 0" />
    C# :

    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
    /// <summary>
          /// Gets or sets the filePath
          /// </summary>
          public string FilePath
          {
              get
              {
                  return this._filePath;
              }
     
              set
              {
                  this._filePath = value;
                  this.RaisePropertyChanged(() => this.FilePath);
                  this.UpdateMessageCommand.RaiseCanExecuteChanged();
                  if (!this.MessageCanBeUpdated())
                  {
                      this.Message = string.Empty;
                  }
              }
          }
    Puis un bouton sur lequel ce dernier clique quand il a rentré le chemin :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Button
     Grid.Column="1"
     Grid.Row="1"
     Content="Valider"
     Margin="5, 0"
     Command="{Binding UpdateMessageCommand, Mode=TwoWay}" />
    Ce bouton active la méthode déléguée "UpdateMessageCommand :

    C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    /// <summary>
        /// Gets or sets the update message command.
        /// </summary>
        public DelegateCommand UpdateMessageCommand { get; set; }
    Qui "lance" la méthode "UpdateMessage"

    C#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void UpdateMessage()
           {
     
               this.OcLogs = fileProvider.LineByLineReading(this.FilePath);
               Console.WriteLine("OCLOGS COUNT = "  + OcLogs.Count);
               this.Message = "Chemin du fichier : " + this.FilePath;
               fileProvider.LineByLineReading(this.FilePath);
           }
    OcLogs est une ObservableCollection, et la méthode "fileProvider.LineByLineReading(filePath)" prend un chemin de fichier en paramètre, le lis ligne par ligne, génère un objet "Log" à chaque ligne, et ajoute cet objet Log à une ObservableCollection que la méthode finit par renvoyer à a fin.

    Jusque là pas de problèmes, j'obtiens bien une ObservableCollection à partir de mon chemin : lorsque je fais "count" sur la collection, le resultat correspond bien à ce que j'attends (le nombre d'objets est égal au nombre de ligne du fichier. Facile.)

    Là ou ça se complique, c'est que je voudrais afficher le contenu de cette collection dans une ComboBox.

    Comme ma collection est remplie, je pensais qu'un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox Grid.Column="0" Grid.Row="2"  ItemsSource="{Binding OcLogs}" DisplayMemberPath="Session" Margin="5,0" />
    suffirait, mais apparemment non...

    Quelqu'un à une idée de ce que je pourrais faire?

    Merci d'avance!

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Par défaut
    Du coup, comme mon but était de trier mes données, j'ai utilisé un DataGrid :
    Xaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <TextBox Grid.Column="0" Grid.Row="1" Text="{Binding FilePath, UpdateSourceTrigger=PropertyChanged}" Margin="5, 0" />
     
     <DataGrid
               Grid.Column="0"
               Grid.ColumnSpan="2"
               Grid.RowSpan="2"
               Grid.Row="4"
               ItemsSource="{Binding Path=OcLogs, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
               AutoGenerateColumns="True"
               Margin="5,0"/>
     
    <Button Grid.Column="1" Grid.Row="1" Content="Valider" Margin="5, 0" Command="{Binding UpdateMessageCommand, Mode=TwoWay}" Click="Button_Click" />
    et du côté du c# :
    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
      /// <summary>
          /// base collection for the comboBox
          /// </summary>
          private ObservableCollection<Log> _ocLogs { get; set; }
          /// <summary>
          /// gets or sets the Log collection
          /// </summary>
          public ObservableCollection<Log> OcLogs
          {
              get
              {
                  return _ocLogs;
              }
              set
              {
     
                  _ocLogs = value;
                  this.RaisePropertyChanged(() => this.OcLogs);
     
              }
          }
     
    /// <summary>
          /// Gets or sets the update message command.
          /// </summary>
          public DelegateCommand UpdateMessageCommand { get; set; }
     
          /// <summary>
          /// Initialize all commands.
          /// </summary>
          public override void InitializeCommand()
          {
              base.InitializeCommand();
     
              this.UpdateMessageCommand = new DelegateCommand(this.UpdateMessageAndCombo, this.MessageCanBeUpdated);
          }
     
          /// <summary>
          /// Update the message displayed.
          /// </summary>
          private void UpdateMessageAndCombo()
          {
     
              this.OcLogs = fileProvider.LineByLineReading(this.FilePath);
              Console.WriteLine("OCLOGS COUNT = "  + OcLogs.Count);
              this.Message = "Chemin du fichier : " + this.FilePath;
     
     
          }
    Et j'obtiens une grille de données avec toutes mes infos.

    Voila, j'espère que ça aidera quelqu'un.

    Bonne journée.

Discussions similaires

  1. [WPF] ComboBox, binding avec association LINQ
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 30/04/2008, 00h30
  2. ComboBox Binding pour la liste et binding pour la valeur à afficher
    Par amandinerenard dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 18/02/2008, 17h29
  3. Rafraîchir une combobox bindée
    Par Zebeber dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/02/2007, 07h49
  4. [VS2005] Datagridview et combobox binding
    Par s.n.a.f.u dans le forum Visual Studio
    Réponses: 3
    Dernier message: 13/12/2006, 16h15
  5. [VS2005][C#]Formulaire, ComboBox bindings
    Par Oufti dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/06/2006, 18h14

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