所以,用几句话说。我有一个类结构,每个类都包含List
和#34; child"另一类的项目。我需要使用每个类的自定义模板将其绑定到TreeView。
主类看起来像这样加上一些属性和方法:
public static class TreeVM
{
public string Name { get; set; }
public static List<ConfigVM> configsVM = new List<ConfigVM>();
}
这包含ConfigVM
项目列表:
public class ConfigVM
{
public string Name { get; set; }
public List<ComPortVM> comPortsVM = new List<ComPortVM>();
}
与班级ComPortVM
等相同
我需要使用TreeView显示它。我写了一些xaml代码来定义每个类的视图:
<HierarchicalDataTemplate DataType="{x:Type vm:TreeVM}" ItemsSource="{Binding configsVM}">
<StackPanel Orientation="Horizontal">
<RadioButton Height="16" GroupName="Config" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<Image Source="Icons/IconConfig.png"/>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type vm:ConfigVM}" ItemsSource="{Binding _comPortsVM}">
<StackPanel Orientation="Horizontal">
<CheckBox Height="16" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<Image Source="Icons/IconComPort.png"/>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
和TreeView:
<Grid x:Name="GridForTreeView" DataContext="{Binding vm:TreeVM}">
<TreeView x:Name="ComPortsTree"
ItemsSource="{Binding}" />
</Grid>
但它不起作用。
如何正确使用?
答案 0 :(得分:0)
尝试替换
public static List<ConfigVM> configsVM = new List<ConfigVM>();
代表
public List<ConfigVM> configsVM {get;set}
然后在构造函数中初始化列表
public TreeVM (){ configsVM = new List<ConfigVM> ();}
为其他班级做同样的事。
然后在你的XAML中尝试这样做:
<Grid x:Name="GridForTreeView" DataContext="{Binding vm:TreeVM}">
<TreeView x:Name="ComPortsTree"
ItemsSource="{Binding configsVM }" ItemTemplate= {StaticResource hierachTemplate} />
</Grid>
并在您的层级中:
<HierarchicalDataTemplate x:Name="hierachTemplate" ItemsSource="{Binding comPortsVM }">
猜猜它......尝试一下