現在、前任者のツールをアップグレードしていますが、TreeView
問題が発生しています。彼のソフトウェアはデータを 1 回分析し、結果をTreeView
. リアルタイム データを分析するようにツールを変更したため、ユーザーはリアルタイムで結果を取得できます。ここで、更新後でも、ユーザーが展開したときにツリービューノードを展開したままにしたいと思います。このトピックが何度か議論されていることは知っており、回答を読むのに何時間も費やしましたが、問題の解決策は見つかりませんでした.
基本的な問題は、安定したツリーがなくなり、現在、ツリーが毎回再作成されていることです。私はこれまでデータ バインディングや XAML について何も知らず、XAML でプログラミングを学ぶ時間もほとんどありませんでした。以下に、私の前任者が作成したようなコードを示します。今まで何も変更していません。この方法を 2 ~ 5 秒ごとに思い出すだけです。
展開されたノードに関する情報をどこにでも (グローバルに?) 保存し、更新後に再展開する (簡単な?) 方法はありますか?
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);