Bonjour,

j'ai un petit problème d'actualisation d'ObservableCollection.

Pour mon projet, j'ai 2 fichiers XML bindés, dont 1, les données s'affichent dans une listView(pas de problème d'actualisation de la collection) et l'autre fichier XML bindé, s'affiche dans des champs TextBox.

Malheureusement lors de modification des TextBox, je n'arrive pas à sérializer les changements, car l'ObservableCollection ne tient pas compte des changements.

Ce qui me déboussole un peu, c'est que pour la collection liée à la listView, j'ai pratiquement le même code et pourtant dès que je modifie un champ, la modification est bien reportée dans l'observableCollection...

J'ai testé : INotifyPropertyChanged mais sans résultat.

Voici les points principaux de mon projet :

XAML:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 
<c:ConfigCollection x:Key="Config"/>
<TextBox Name="tbOffset" Text='{Binding Source={StaticResource Config}, Path=Offset}' />
Classe ObservableCollection

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
 public class Config : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public SetupFtpSsh SetupFtpSsh;
           
        public Config()
        {

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

        //Deserialize a XML file and send it in a collection
        public ConfigCollection LoadConfig(ConfigCollection pConfigCollection, string pFilePath)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(ConfigCollection));
            using (StreamReader streamReader = new StreamReader(pFilePath))
            {
                pConfigCollection = xmlSerializer.Deserialize(streamReader) as ConfigCollection;
            }
            return pConfigCollection;
        }
        //Serialize a XML file from a collection
        public void SaveConfig(ConfigCollection pConfigCollection, string pFilePath)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(ConfigCollection));
            using (StreamWriter streamWriter = new StreamWriter(pFilePath))
            {
                xmlSerializer.Serialize(streamWriter, pConfigCollection);
            }
        }

    }
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
public class SetupFtpSsh
       {
           public event PropertyChangedEventHandler PropertyChanged;
 
           private string offset;
 
 
           public SetupFtpSsh()
           {
 
           }
 
           private void OnPropertyChanged(string propertyName)
           {
               if (this.PropertyChanged != null)
                   this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
           }
 
           public SetupFtpSsh(string offset)
           {
               this.offset = offset;
           }
 
           public string Offset
           {
               get { return offset; }
               set { offset = value; }
           }

Code behind

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
        private Config config = new Config();
        private ConfigCollection configCollection = new ConfigCollection();

 public Window1()
        {
configCollection = config.LoadConfig(configCollection, filePathConfig);//Le load marche parfaitement

foreach (Config t_config in configCollection)
             {
            // SetupFtpSsh Part
                tbOffset.Text = t_config.SetupFtpSsh.Offset;
}
L'appel de la méthode Save où la collection ne se met pas à jour automatiquement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
private void buttonSaveConfiguration_Click(object sender, RoutedEventArgs e)
        {
            config.SaveConfig(configCollection, filePathConfig);
        }
configCollection n'est jamais touché mis à part ces lignes ci-dessus.

D'où pourrait provenir le problème ??

J'ai pensé au binding qui est fait directement sur le TextBox(y'en a plusieurs dans mon programme bien sûr) à la place de faire le Binding sur un élément Group par exemple (StackPanel ou autres).

Sinon, j'ai tenté d'approfondir avec INotifyPropertyChanged(enlevé, déplacé). et là aucun changement.

Ce que je n'ai pas bien compris, pour ma listView, j'ai totalement enlevé les appels de INotifyPropertyChanged et pourtant, ma collection se mettait toujours à jour !!!!


Un grand merci d'avance pour votre aide.