Lar*_*mow 7 .net c# wpf treeview xaml
我目前正在升级我的前任的工具,我陷入了一个TreeView问题.他的软件分析了一次数据并将结果显示在a 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);
Run Code Online (Sandbox Code Playgroud)
我真的需要先更深入地了解 WPF 吗?
我会说是的,特别是如果您计划在更长的时间内工作/支持此应用程序;如果您将来想在 WPF 中工作,那么最好先了解 XAML 和 WPF 概念。
就我个人而言,我永远不会以这种方式实现这个工具,相反,我会按照以下文章中的描述使用 MVVM 方法,并使其干净、可维护和高效 -使用 ViewModel 模式简化 WPF TreeView
有没有一种(简单的?)方法可以在任何地方(全局?)存储有关扩展节点的信息并在刷新后重新扩展它
你可以试试这样的——
创建一个列表来存储扩展节点的标头(或任何唯一的属性/id)
private List<string> expandedNodes = new List<string>();
Run Code Online (Sandbox Code Playgroud)
处理每个节点(有子节点)的 Expanded 和 Collapsed 事件
TreeViewItem alarmItem = new TreeViewItem();
alarmItem.Expanded += OnAlarmItemExpanded;
Run Code Online (Sandbox Code Playgroud)
每当节点展开/折叠时更新列表 -
private void OnAlarmItemExpanded(object sender, RoutedEventArgs e)
{
TreeViewItem treeNode = sender as TreeViewItem;
string header = treeNode.Header.ToString();
if (expandedNodes.Contains(header) == false)
{
expandedNodes.Add(header);
}
}
private void OnAlarmItemCollapsed(object sender, RoutedEventArgs e)
{
TreeViewItem treeNode = sender as TreeViewItem;
string header = treeNode.Header.ToString();
if (expandedNodes.Contains(header))
{
expandedNodes.Remove(header);
}
}
Run Code Online (Sandbox Code Playgroud)
下次创建 TreeViewItem 时,如果列表中存在它的 header(Uniques Id),请展开它 -
if (expandedNodes.Contains(header))
{
alarmItem.IsExpanded = true;
}
Run Code Online (Sandbox Code Playgroud)
这需要为 groupItem 和 alarmItem 完成。
| 归档时间: |
|
| 查看次数: |
6707 次 |
| 最近记录: |