Autor Beitrag
k-weddige
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 49

Win Vista Business
C# (VS 2008 Professional)
BeitragVerfasst: Do 06.11.08 10:38 
Moin,

ich habe ein Projekt, in dem ich Daten, die ich in Objekten speicher, die ich in einer BindingList verwalte, in einer Listbox anzeigen möchte.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
public class Character : INotifyPropertyChanged
    {
[...]
        public event PropertyChangedEventHandler PropertyChanged;
[...]
        public string Surename
        {
            get { return mySurename; }
            set
            {
                mySurename = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(thisnew PropertyChangedEventArgs("Surename"));
                }
            }
        }
[...]
    }

    public class CharacterList : BindingList<Character>
    {[...]}


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        private CharacterList data = new CharacterList();
[...]
        private void Form1_Load(object sender, EventArgs e)
        {
            listBoxData.DataSource = data;
            listBoxData.DisplayMember = "ShortName";
[...]
        }

Wenn ich nun ein neues Objekt zu data hinzufüge, ist das kein Problem. Auch löschen geht tadellos. Aber wenn ich nun einen Datensatz verändere, sollte das eigentlich in der ListBox angezeigt werden. Leider bleibt die betroffene Zeile unberührt und einer (belibige?) anderen Zeile wird dann der neue Wert zugewiesen. Der Datensatz, der ursprünglich an der neuen Stelle stand, wird nicht mehr angezeigt.


TIA
Konstantin

_________________
Meine Programme sind perfekt, der Computer versteht sie bloß nicht.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 06.11.08 11:59 
Ich denke, der Fehler liegt darin, daß du ein eigenes PropertyChanged Event generiert hast (womit hast du dieses denn verbunden?).
Du solltest nur das PropertyChanged-Event der BindingList auslösen.
k-weddige Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 49

Win Vista Business
C# (VS 2008 Professional)
BeitragVerfasst: Do 06.11.08 12:19 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke, der Fehler liegt darin, daß du ein eigenes PropertyChanged Event generiert hast (womit hast du dieses denn verbunden?).

Um die Behandlung sollte sich eigentlich die BindingList selbstständig kümmern und das macht sie wohl auch: Schließlich verändert sich die ListBox, wenn ich ein Item ändere. Nur die korrekte Darstellung der Daten funktioniert nicht. Ein Item wird doppelt (mit zwei verschiedenen Beschriftungen) und dafür ein anderes gar nicht angezeigt.
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Du solltest nur das PropertyChanged-Event der BindingList auslösen.

Das wird schwierig, weil das Item ja nichts von seiner Liste weiß.

Konstantin

_________________
Meine Programme sind perfekt, der Computer versteht sie bloß nicht.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 06.11.08 12:54 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke, der Fehler liegt darin, daß du ein eigenes PropertyChanged Event generiert hast (womit hast du dieses denn verbunden?).

Er implementiert INotifyPropertyChanged, das ist schon richtig.

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Du solltest nur das PropertyChanged-Event der BindingList auslösen.
Nein, es ändert sich ja nicht die Eigenschaft der BindingList, sondern des Character.


@k-weddige: Das sieht eigentlich richtig aus. Hast Du irgendeine Sortierung in der Listbox aktiv, sodass da etwas umsortiert wird, wenn sich eine Eigenschaft ändert?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
k-weddige Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 49

Win Vista Business
C# (VS 2008 Professional)
BeitragVerfasst: Do 06.11.08 12:59 
Danke! :D
Ich hatte bei der ListBox Sorted aktiviert. :oops:

Konstantin

_________________
Meine Programme sind perfekt, der Computer versteht sie bloß nicht.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 06.11.08 13:03 
Schön, dass das geklappt hat :-)

Noch ein Hinweis: Ich würde im Setter noch prüfen, ob value != mySurename ist und nur dann den Wert setzen und das Ereignis auslösen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
k-weddige Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 49

Win Vista Business
C# (VS 2008 Professional)
BeitragVerfasst: Do 06.11.08 13:19 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Noch ein Hinweis: Ich würde im Setter noch prüfen, ob value != mySurename ist und nur dann den Wert setzen und das Ereignis auslösen.

Das ist sinnvoll. Danke für den Hinweis, ich werde das einbauen.

_________________
Meine Programme sind perfekt, der Computer versteht sie bloß nicht.