将TreeView(再次,是的)绑定到我的类列表

时间:2014-04-21 09:55:50

标签: c# wpf xaml treeview

所以,用几句话说。我有一个类结构,每个类都包含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>

但它不起作用。

如何正确使用?

1 个答案:

答案 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 }">

猜猜它......尝试一下