2017-10-11 43 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

相關問題