0

我有以下两个课程:

public class DeviceGroup
    {
        public String Name { get; set; }
        public ObservableCollection<DeviceGroup> DeviceGroups { get; set; }
        public ObservableCollection<Device> Devices { get; set; }


        public DeviceGroup()
        {
            Name = String.Empty;
            DeviceGroups = new ObservableCollection<DeviceGroup>();
            Devices = new ObservableCollection<Device>();
        }
    }

    public class Device
    {
        public String Name { get; set; }
    }

我的主类有一个 ObservableCollection。

在我的 Xaml - 如果我只是在我的 HierachicalDataTemplate 中指定 DeviceGroup,我可以轻松地创建一个树视图,如下所示:

<Window.Resources>
    <ResourceDictionary>
        <DataTemplate DataType="{x:Type local:Device}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:DeviceGroup}" ItemsSource="{Binding DeviceGroups}">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
    </ResourceDictionary>
</Window.Resources>
<Grid>        
    <TreeView ItemsSource="{Binding DeviceGroups}"/>
</Grid>

问题是:如何选择设备集合以及设备组?我希望设备看起来像 Windows 资源管理器(目录和文件)。这个问题有 Xaml 解决方案吗?或者我是否必须在代码隐藏中创建 TreeViewItems。谢谢。

4

1 回答 1

0

到目前为止,我发现的唯一解决方案是在后面的代码中:

    private void LoadTree()
    {
        foreach (DeviceGroup dg in ttvm.DeviceGroups)
        {
            TreeViewItem tvi = new TreeViewItem();
            tvi.Header = dg;
            treeView1.Items.Add(tvi);
            AddTreeItems(tvi, dg);
        }
    }

    private void AddTreeItems(TreeViewItem node, DeviceGroup deviceGroup)
    {
        foreach (DeviceGroup dg in deviceGroup.DeviceGroups)
        {
            TreeViewItem groupTVI = new TreeViewItem();
            groupTVI.Header = dg;
            node.Items.Add(groupTVI);
            AddTreeItems(groupTVI, dg);
        }

        foreach (Device device in deviceGroup.Devices)
        {
            TreeViewItem deviceTVI = new TreeViewItem();
            deviceTVI.Header = device;
            node.Items.Add(deviceTVI);
        }
    }

LoadTree() 在 InitilizeComponent 之后调用。Xaml 更改为:窗口资源:

        <HierarchicalDataTemplate DataType="{x:Type local:DeviceGroup}" ItemsSource="{Binding DeviceGroups}">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>

在网格中只有一个普通的树视图。

于 2010-05-26T13:33:57.830 回答