Erstellen, aktualisieren einer WPF-TreeView und denken Sie daran expandierten Knoten ohne XAML

Ich bin derzeit auf der Upgrade-tool von meinem Vorgänger und ich bin stecken geblieben auf einem TreeView Problem. Seine software analysiert Daten ein mal und zeigte die Ergebnisse in einer TreeView. Ich wechselte das Werkzeug zum analysieren von Daten in Echtzeit und damit erhält der Benutzer Echtzeit-Ergebnisse. Nun, ich würde gerne in der Strukturansicht den Knoten zu halten, erweitert, wenn der Benutzer erweitert es auch nach dem update. Ich weiß, das Thema wurde mehrmals diskutiert und ich verbrachte Stunden Lesen die Antworten, aber ich fand nie eine Lösung für mein problem.

Das grundlegende problem ist: es gibt keine stable-tree nicht mehr und derzeit der Baum ist gerade neu erstellt jedes mal. Ich habe keine Ahnung über Datenbindung oder XAML-bis jetzt und einige Zeit lernen Sie die Programmierung im XAML-Code. Unten sehen Sie den code, wie es wurde von meinem Vorgänger. Ich habe nichts ändern, bis jetzt habe ich nur erinnern, diese Methode alle 2-5 Sekunden.

Gibt es eine (einfache?) Möglichkeit zum speichern der Informationen über expandierten Knoten irgendwo (global?) und re-erweitern Sie es nach dem aktualisieren, oder muss ich wirklich brauchen, um ein tieferes Verständnis von WPF erste?

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); 
InformationsquelleAutor Larimow | 2012-07-18
Schreibe einen Kommentar