Aktualnie aktualizuję narzędzie mojego poprzednika i utknąłem na numerze TreeView
. Jego oprogramowanie przeanalizowało dane jeden raz i wyświetliło wyniki w postaci TreeView
. Zmieniłem narzędzie, aby analizować dane w czasie rzeczywistym, dzięki czemu użytkownik uzyskuje wyniki w czasie rzeczywistym. Teraz chciałbym, aby węzły widoku drzewa były rozwijane, gdy użytkownik je rozwija, nawet po aktualizacji. Wiem, że ten temat był omawiany kilka razy i spędziłem godziny czytając odpowiedzi, ale nigdy nie znalazłem rozwiązania dla mojego problemu.Utwórz, odśwież drzewo widoku drzewa WPF i zapamiętaj rozwinięte węzły bez XAML
Podstawowy problem: nie ma już stabilnego drzewa i obecnie drzewo jest ponownie tworzone za każdym razem. Nie mam pojęcia o powiązaniu danych ani o XAML do tej pory, a także o kilku dniach nauki programowania w XAML. Poniżej możesz zobaczyć kod taki jak został stworzony przez mojego poprzednika. Do tej pory nic nie zmieniałem. Przypominam sobie tę metodę co 2-5 sekund.
Czy istnieje (łatwy?) Sposób przechowywania informacji o rozszerzonych węzłach w dowolnym miejscu (globalny?) I ponownie go rozwinąć po odświeżeniu lub czy naprawdę muszę najpierw lepiej zrozumieć 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);
Dziękuję bardzo.Po prostu próbowałem innego podejścia, podłączając całe drzewo i przechowując węzły oraz jego status w słowniku, ale to nie zadziałało. Twoje podejście brzmi lepiej. Właśnie go wdrażam. – Larimow
Dziękuję jeszcze więcej. Działa idealnie. Powinienem był zadać to pytanie 3 dni wcześniej ... O WPF: W tej chwili jest jeszcze dwa inne problemy. Kiedy rozwiązałem te problemy, mogę "zabrudzić sobie ręce". Na razie staram się unikać XAML – Larimow
Dobre rozwiązanie. Ale lepiej użyj zamiast tego GetHashCode. ciąg nagłówka nie jest bardzo unikalnym identyfikatorem. – shj