如何将对象及其属性绑定到树视图

我有一个设备列表。这些仅具有名称和DeviceInfos列表。 这些DeviceInfo具有键和值。现在,我想构建一个TreeView,它显示每个Device并以treeviewitems的形式显示所有值。 Abd我不知道如何在XAML中绑定它。

我使用.NET Framework 4.8

#000 1000110100? 1140 1360 062 169 169 0035 00 000000000000010000000 OFF.\r

    public class Device
    {
        public string Name {get; set;}
        public List<DeviceInfo> deviceInfos {get; set;}
    }

    public class DeviceInfo
    {
        public int key {get; set;}
        public value values {get; set;}
    }

    public class values
    {
         public string Type {get; set;}
         public string TypeName {get; set;}
    }

    public List<Device> devices {get; set;}

计划的结果应如下所示:


    <TreeView ItemsSource="{Binding devices}" Margin="2">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Device}">
                <TreeViewItem Header="{Binding name}">
                    <TreeViewItem ItemsSource="{Binding deviceInfos}" Header="{Binding TypeName}">
                    </TreeViewItem>
                </TreeViewItem>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

修改
很抱歉这个不清楚的问题。我得到它的根源。所以我看到了deviceName,我可以展开它。但我无法显示DeviceInfos。更改后的财产在其他地方处理。我只是省去了缩短时间。

这部分正在工作:

+ Device  
    + DeviceInfo.Value.Type  
        DeviceInfo.ValueTypeName  
+ Device3  
    + DeviceInfo.Value.Type  
        DeviceInfo.ValueTypeName  
    + DeviceInfo.Value.Type  
        DeviceInfo.ValueTypeName  
    + DeviceInfo.Value.Type  
        DeviceInfo.ValueTypeName  
+ Device3  
    + DeviceInfo.Value.Type  
        DeviceInfo.ValueTypeName
kangzilong 回答:如何将对象及其属性绑定到树视图

您应该为每种类型定义一个模板:

<TreeView ItemsSource="{Binding devices}" Margin="2">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Device}" ItemsSource="{Binding deviceInfos}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type local:DeviceInfo}">
            <TextBlock Text="{Binding values.Type}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

如果要能够扩展DeviceInfo,它必须具有IEnumerable属性。您的values类型似乎并不是有效地使IEnumerable在树中成为叶子的DeviceInfo

,

您应该从Nuget中添加项目Fody.PropertyChanged,并且

public class Device : INotifyPropertyChanged
{
    public string name {get;set;}
    public ObservableCollection<DeviceInfo> deviceInfos {get;set;}
    public event PropertyChangedEventHandler PropertyChanged = (sender,e) 
}

public class DeviceInfo : INotifyPropertyChanged
{
    public int key {get;set;}
    public values value {get;set;}
    public event PropertyChangedEventHandler PropertyChanged = (sender,e) => { };
}

public class values : INotifyPropertyChanged
{
     public string Type {get;set;}
     public string TypeName {get;set;}
     public event PropertyChangedEventHandler PropertyChanged = (sender,e) => { };
}

然后您可以绑定到ObservableCollection<Device> devices {get;set;}

编辑:我不知道如何使用treeview,因为我从不需要它。但是您可以通过几次调整绑定来实现您的目标。

这行代码看起来不正确<HierarchicalDataTemplate ItemsSource="{Binding Device}">,因为没有名为“设备”的属性

本文链接:https://www.f2er.com/3125356.html

大家都在问