Создайте, обновите WPF TreeView и запомните развернутые узлы без XAML

В настоящее время я обновляю инструмент своего предшественника и застрял на проблеме TreeView. Его программа проанализировала данные один раз и отобразила результаты в TreeView. Я изменил инструмент для анализа данных в реальном времени -, и, следовательно, пользователь получает результаты в реальном времени. Теперь я хочу, чтобы узлы древовидного представления оставались развернутыми, когда пользователь расширяет их, даже после обновления. Я знаю, что эта тема обсуждалась несколько раз, и я часами читал ответы, но так и не нашел решения своей проблемы.

Основная проблема:стабильного дерева больше нет, и в настоящее время дерево каждый раз -создается заново. Я до сих пор понятия не имею о привязке данных или XAML, и у меня мало времени для изучения программирования на XAML. Ниже вы можете увидеть код, как будто он был создан моим предшественником. Я ничего не менял до сих пор, просто вспоминаю этот метод каждые 2 -5 секунд.

Есть (легкий? )способ хранить информацию о расширенных узлах в любом месте (глобально? )и повторно -расширить его после обновления, или мне действительно нужно сначала получить более глубокое понимание WPF?

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); 
7
задан akjoshi 29 August 2012 в 14:24
поделиться