2017-10-11 39 views
1

如何在树中叶的不同属性的类?WPF层次数据模板在类中具有不同的属性

我想是这样的

AMachine 
-Wheels 
Bmachine 
-Years 

Code.cs

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      DataContext = new TestViewModel(); 
     } 
    } 

    public class TestViewModel 
    { 
     public ObservableCollection<IBase> Items { get; set; } 

     public TestViewModel() 
     { 
      Items = new ObservableCollection<IBase>(); 
      Items.Add(new AMachine { Wheels = "3", Name = "AMachine" }); 
      Items.Add(new BMachine { Years = "2", Name = "BMachine" }); 
     } 
    } 
    public interface IBase 
    { 

    } 

    public class AMachine : IBase 
    { 
     public string Name { get; set; } 
     public string Wheels { get; set; } 
    } 

    public class BMachine : IBase 
    { 
     public string Name { get; set; } 
     public string Years { get; set; } 
    } 

Xaml.cs

<Grid> 
     <TreeView Height="300" Width="300" ItemsSource="{Binding Items}"> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type self:IBase}" ItemsSource="{Binding Items}"> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Name}" /> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 
    </Grid> 
+0

你没有任何嵌套,为什么'HierachicalDataTemplate'和'TreeView'? – Sinatr

+0

@Sinatr,它是TreeView的条件。 – A191919

回答

1

你并不需要在这里分层数据模板,逻辑将使用正常的数据模板和ListBox(带扩展为节点?):

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.Resources> 
     <DataTemplate DataType="{x:Type local:AMachine}"> 
      <Expander Header="{Binding Name}"> 
       <TextBlock Text="{Binding Wheels}" /> 
      </Expander> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:BMachine}"> 
      <Expander Header="{Binding Name}"> 
       <TextBlock Text="{Binding Years}" /> 
      </Expander> 
     </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 

enter image description here

相关问题