WPF ComboBox, ObservableCollection... Damned!

CH4BRN 29 Messages postés lundi 19 février 2018Date d'inscription 19 juin 2018 Dernière intervention - 19 févr. 2018 à 16:39 - Dernière réponse : Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention
- 20 févr. 2018 à 10:31
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 :

<TextBox Grid.Column="0" Grid.Row="1" Text="{Binding FilePath, UpdateSourceTrigger=PropertyChanged}" Margin="5, 0" />


C# :
/// <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 :



<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#:

 
/// <summary>
    /// Gets or sets the update message command.
    /// </summary>
    public DelegateCommand UpdateMessageCommand { get; set; }


Qui "lance" la méthode "UpdateMessage"

C#:

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 :

<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!

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

4 réponses

Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 19 févr. 2018 à 18:02
0
Merci
Bonjour

tu as mis plein de codes qui ne concernent pas ta question et pas celui qui serait utile....
Peux tu montrer la classe OcLogs?

PS, pour la coloration syntaxique il faut forcer la couleur en C#, (voir ici) sinon, ça fait des encarts gris.
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 19 févr. 2018 à 20:25
Merci à NHenry d'avoir corriger la coloration.
Commenter la réponse de Whismeril
CH4BRN 29 Messages postés lundi 19 février 2018Date d'inscription 19 juin 2018 Dernière intervention - 20 févr. 2018 à 09:07
0
Merci
Du coup, comme mon but était de trier mes données, j'ai utilisé un DataGrid :
Xaml :

<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# :
    /// <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.

Merci de m'avoir répondu. Et désolé pour le "flou" de mon sujet, je suis débutant en WPF, je navigue un peu dans le brouillard.
Vous risquez de me revoir !
Commenter la réponse de CH4BRN
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 20 févr. 2018 à 10:31
0
Merci
Si cela résout ton problème, merci de marquer le sujet résolu
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#marquer-un-sujet-resolu

Sinon, pour la combobox, je pense qu’il faut que OcLogs implémente INotifyPropertyChanged
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.