Я пытаюсь заполнить дерево, используя трехуровневый объект.
Входными данными для древовидного представления является ObservableCollection (GroupClass), где GroupClass содержит свойство с именем devices = ObservableCollection (DeviceDetails).
Когда я щелкаю объект DeviceDetails в пользовательском интерфейсе, я хотел бы получить индекс элемента DeviceDetails и индекс объекта GroupClass, к которому он принадлежит.
Я успешно заполнил древовидную структуруиспользуя коллекцию GroupClass, используя иерархический шаблон и шаблон данных.
Я посмотрел, как получить подробную информацию о выбранном элементе в виде дерева, но в большинстве решений использовался триггер TreeViewItem.Selected.
В моем случае, поскольку я использую иерархический шаблон и шаблон данных, у меня нет какого-либо элемента TreeView, определенного в моем XAML.
Класс группы:
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; }
}
XAML-код для заполнения TreeView:
<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.