Laden...

ListView aktualisieren? ListView ändert sich nicht, wenn sich die Datenquelle ändert

Erstellt von core vor 15 Jahren Letzter Beitrag vor 15 Jahren 8.178 Views
C
core Themenstarter:in
157 Beiträge seit 2008
vor 15 Jahren
ListView aktualisieren? ListView ändert sich nicht, wenn sich die Datenquelle ändert

Hi Leute,

ich versuche verzweifelt meine Listview zu aktualisieren. Diese habe ich zwar mit daten gefüllt, aber wenn ich die Datenquelle ändere, aktualisiert sich die ListView leider nicht mit. Nun habe ich bei meiner Recherche im Netz etwas gefunden, dass mir vieleicht weiter hilft, aber ich bekomme es nicht hin.

Demnach soll müsste ich ObservableCollection verwenden. Das will aber irgendwie nicht funktionieren, da der Compiler ObservableCollection nicht kennt. Hab ich etwa ein noch benötigtes Assembly vergessen einzubinden?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections.ObjectModel;

namespace MyMessage
{
    public class MyMessageContainer
    {
        public string message { get; set; }
        public string type { get; set; }
        public string date { get; set; }
      
        public MyMessageContainer(string type, string message)
        {
            this.message = message;
            this.type = type;
            this.date = this.now();
        }

        private string now()
        {
            DateTime dateTime = DateTime.Now;
            return dateTime.ToString("MM/dd/yyyy hh:mm:ss.fff");
        }
    }

    public class MyMessageContainerCollection : ObservableCollection<CoreMessageContainer>
    {
           ...?
    }
}


    public class MyMessagesUserControl
    {
        private List<MyMessageContainer> myMessages = null;

        public MyMessagesUserControl()
        {
            this.myMessages = new List<MyMessageContainer>();
            this.addMessage("Test1", "Testnachricht");
            this.addMessage("Test2", "Testnachricht");
            this.addMessage("Test3", "Testnachricht");
            this.listViewMessages.ItemsSource = myMessages;
            this.addMessage("Test4", "Testnachricht"); // wird nicht mehr angezeigt
            this.addMessage("Test5", "Testnachricht"); // wird nicht mehr angezeigt
            this.InitializeComponent();
        }

        public void addMessage(string message, int type)
        {
            this.myMessages.Add(new MyMessageContainer(type, message));
        }
    }
}


<ListView IsSynchronizedWithCurrentItem="True" Grid.ColumnSpan="4" Width="870" Height="235" x:Name="listViewMessages">
                <ListView.View>
                    <GridView x:Name="gridViewMessages">
                        <GridViewColumn DisplayMemberBinding="{Binding Path=date}" Width="Auto" Header="Date/Time"/>
                        <GridViewColumn DisplayMemberBinding="{Binding Path=type}" Width="Auto" Header="Type"/>
                        <GridViewColumn DisplayMemberBinding="{Binding Path=message}" Width="Auto" Header="Message"/>
                    </GridView>
                </ListView.View>
            </ListView>

Ich hoffe, dass meine Code.Brocken ausreichen, um mein Problem nachvollziehen zu können. Kann mir (einer mittlerweile verzweifelten Seele) bitte einer von euch helfen?!

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo,

die Info mit der ObservableCollection ist schon mal gut.
Hier findest du weitere Infos dazu: ObservableCollection<T> Class

Für die ObservableCollection brauchst du das Using
using System.Collections.ObjectModel;

Damit muss die ObservableCollection dann schon funzen

Gruss
Michael

//EDIT: Da kannst du natürlich noch, das INotifyPropertyChanged-Interface einbinden, damit die Observablecollection auch aktualisiert wird, wenn sich nur eine Eigenschaft eines Items ändert.

C
252 Beiträge seit 2007
vor 15 Jahren

Wie wärs wenn du danach einfach ein Refresh() machst. Das sollte das Problem beheben und alle Items angezeigt werden.

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo chavez,

Wie wärs wenn du danach einfach ein Refresh() machst. Das sollte das Problem beheben und alle Items angezeigt werden.

Ja, das würde schon funktionieren, aber es ist doch viel praktischer direkt die Vorteile (DataBinding) von WPF zu nutzen. Und es ist auch nicht viel Arbeit das INotifyPropertyChanged-Ereignis zu implementieren.
Damit braucht man sich um das Refreshen nicht zu kümmern.

Gruss
Michael