我正在尝试使用三级对象填充树视图。
树视图的输入是ObservableCollection(GroupClass),其中GroupClass包含一个称为devices = ObservableCollection(DeviceDetails)的属性。
当我在UI中单击DeviceDetails对象时,我想获取DeviceDetails项目的索引以及它所属的GroupClass对象的索引。
我使用分层模板和数据模板使用GroupClass的集合成功填充了树视图。
我研究了如何在树视图中获取所选项目的详细信息,但是大多数解决方案都使用TreeViewItem.Selected触发器。
就我而言,由于我使用的是分层模板和数据模板,因此我的XAML中没有定义任何TreeView项。
组类别:
public class GroupClass
{
public GroupClass()
{
this.devices = new ObservableCollection<DeviceDetails>();
}
public string groupName { get; set; }
public ObservableCollection<DeviceDetails> devices { get; set; }
}
public class DeviceDetails
{
public DeviceDetails()
{
this.status = "Online";
this.ipAddress = "192.168.1.1";
this.dateAccessed = DateTime.Now;
}
public string deviceName { get; set; }
public string status { get; set; }
public DateTime dateAccessed { get; set; }
public string ipAddress { get; set; }
}
用于填充TreeView的XAML代码:
<Grid x:Name="ListPage" HorizontalAlignment="Stretch" Margin="0,80,0,0" >
<TreeView x:Name="HostTreeView" HorizontalAlignment="Stretch" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:GroupClass}" ItemsSource="{Binding devices}">
<Grid HorizontalAlignment="Stretch" Name="HeaderPanel5">
<Grid Margin="0,0,0,0" >
<TextBlock Text="{Binding groupName}" />
</Grid>
</Grid>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:DeviceDetails}">
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="checkBox" />
<TextBlock Text="{Binding deviceName}" />
<TextBlock Text="{Binding status}" />
<TextBlock Text="{Binding dateAccessed}" />
<TextBlock Text="{Binding ipAddress}" />
<Button Content="Rename Device" Height="30"/>
<Button Content="Remove Device" Height="30"/>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
我创建了一个ObservableCollection类型的新对象,并将值从XML文件加载到其中。然后将创建的对象绑定到TreeView ItemsSource。
public static ObservableCollection<GroupClass> groups = new ObservableCollection<GroupClass>();
StreamReader sr = new StreamReader("IPProfileData");
XmlSerializer srlzr = new XmlSerializer(typeof(ObservableCollection<GroupClass>));
groups = (ObservableCollection<GroupClass>)srlzr.Deserialize(sr);
HostTreeView.ItemsSource = groups;
当我单击“重命名设备”或“删除设备”按钮时,我想更改先前创建的对象组。最终,由于TreeView与groups对象绑定,我的UI发生了更改。