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