В настоящее время я обновляю инструмент своего предшественника и застрял на проблеме 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);