Ich aktualisiere derzeit das Tool meines Vorgängers und ich bin auf einem TreeView
Problem fest. Seine Software analysierte Daten einmal und zeigte die Ergebnisse in einer TreeView
an. Ich änderte das Werkzeug, um Echtzeitdaten zu analysieren und somit erhält der Benutzer Echtzeitergebnisse. Jetzt möchte ich, dass die Knoten der Baumansicht erweitert bleiben, wenn der Benutzer sie erweitert, selbst nach einem Update. Ich weiß, dass dieses Thema mehrmals diskutiert wurde und ich Stunden damit verbrachte, die Antworten zu lesen, aber ich habe nie eine Lösung für mein Problem gefunden.Erstellen, aktualisieren Sie eine WPF TreeView und erinnern Sie sich an erweiterte Knoten ohne XAML
Das grundlegende Problem ist: Es gibt keinen stabilen Baum mehr und derzeit wird der Baum jedes Mal neu erstellt. Ich habe bis jetzt keine Ahnung von Datenbindung oder XAML und wenig Zeit, um die Programmierung in XAML zu lernen. Unten sehen Sie den Code, wie er von meinem Vorgänger erstellt wurde. Ich habe bis jetzt nichts geändert, ich erinnere mich nur alle 2 bis 5 Sekunden an diese Methode.
Gibt es eine (einfache?) Möglichkeit, die Informationen über erweiterte Knoten irgendwo (global?) Zu speichern und nach der Aktualisierung wieder zu erweitern oder muss ich wirklich erst ein tieferes Verständnis von WPF bekommen?
foreach (Analyzer.ALARM_GROUP alarmGroup in alarmGroupList)
{
//Display Problem Group
TreeViewItem groupItem = new TreeViewItem();
List<String> ListAreas = new List<string>();
string areas = "";
//GROUP HEADER
//display alarm group which contains more than one alarm
if (alarmGroup.AlarmList.Count > 1)
{
groupItem.Header = Convert.ToString(alarmGroup.AlarmList.Count) + " --- " + alarmGroup.AlarmList[0].EventTime + " " + alarmGroup.AlarmList[0].AlarmText + "\n "
+ alarmGroup.AlarmList[alarmGroup.AlarmList.Count - 1].EventTime + " " + alarmGroup.AlarmList[alarmGroup.AlarmList.Count - 1].AlarmText
+ " --- " + " AREAS: " + areas;
}
else //display alarm group with only one alarm message
{
groupItem.Header = Convert.ToString(alarmGroup.AlarmList.Count) + " --- " + alarmGroup.AlarmList[0].EventTime + " " + alarmGroup.AlarmList[0].AlarmText + " --- " + " AREA: " + areas;
}
//HEADLINE of single Alarm Item
TreeViewItem alarmItem = new TreeViewItem();
alarmItem.Header = "[EVENTTIME] [ALARMTAG] --- [OPCCONDITION] --- [SEVERITY] --- [AREA] --- [ALARMTEXT]";
alarmItem.FontWeight = FontWeights.SemiBold;
groupItem.Items.Add(alarmItem);
//Display single alarm messages
foreach (var alarm in alarmGroup.AlarmList)
{
alarmItem = new TreeViewItem();
alarmItem.Header = alarm.EventTime + " --- " + alarm.AlarmTag + " --- " + alarm.Condition + " --- " + alarm.Severity + " --- " + alarm.Area + " --- " + alarm.AlarmText;
alarmItem.FontWeight = FontWeights.Normal;
groupItem.Items.Add(alarmItem);
}
AlarmPresentationBox.Items.Add(groupItem);
Thank you very much.Ich habe gerade einen anderen Ansatz versucht, indem ich den kompletten Tree angehängt habe und die Knoten und ihren Status in einem Wörterbuch gespeichert habe, aber es hat nicht funktioniert. Dein Ansatz klingt besser. Ich implementiere es nur. – Larimow
Vielen Dank noch mehr. Es funktioniert perfekt. Ich hätte diese Frage 3 Tage vorher stellen sollen ... Über WPF: Es gibt zwei andere Probleme, mit denen man sich im Moment befassen muss. Wenn ich diese Probleme löste, könnte ich "meine Hände schmutzig machen". Für jetzt versuche ich XAML – Larimow
gute Lösung zu vermeiden. Aber ich sollte lieber GetHashCode verwenden. Header-String ist nicht sehr eindeutige ID. – shj