在WPF中的TreeView中,有没有一种方法可以获取所选子节点的索引以及所选子项的父节点的索引

时间:2019-03-28 06:22:04

标签: c# wpf data-binding treeview

我正在尝试使用三级对象填充树视图。

树视图的输入是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发生了更改。

0 个答案:

没有答案