树视图和Multilist Hierarchical数据有问题

时间:2010-05-25 12:45:32

标签: c# xaml treeview hierarchicaldatatemplate

我有以下两个班级:

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>

问题是:如何选择Devices集合以及DeviceGroup?我希望设备看起来像Windows资源管理器(目录和文件)。是否有Xaml解决此问题的方法?或者我将不得不在代码隐藏中创建TreeViewItems。 感谢。

1 个答案:

答案 0 :(得分: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);
        }
    }

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

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

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