递归地向树状网格视图添加深度的方法
Method of recursively adding depth into a tree grid view
所以现在我有一个树状网格视图,最多有 3 级扩展,因为我在另一个数据模板中手动编写了一个嵌套的分层数据模板,我想知道是否有自动添加的方法每当我的 collection 深入扩展时,就可以深入我的树状网格视图。我的项目源也是一个嵌套的 observable collection,其中有分支。
我正在寻找一种递归添加级别而不是手动将它们嵌套在一起的方法。
谢谢。
HierarchicalDataTemplate
应该为您做到这一点。你只需要在TreeView
的DataTemplate
.
中定义一次
我认为我们只需要将 HierachicalDataTemplate
的 ItemsSource
绑定到您的 class 的嵌套 属性 中,它会处理其余部分。
如果我误解了您的意图,请告诉我。
这是我的尝试:
XAML
<TreeView ItemsSource="{Binding Branches}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Branches}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding Id}"></TextBox>
<TextBox Grid.Column="1" Text="{Binding Name}"></TextBox>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
具有嵌套集合的 class
public class Branch
{
public string Id { get; set; }
public string Name { get; set; }
public ObservableCollection<Branch> Branches { get; set; }
}
用于测试目的的主窗体硬编码值
public partial class MainWindow : Window
{
public Branch Branch { get; set; }
public MainWindow()
{
Branch = new Branch()
{
Id = "1",
Name = "A",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "2",
Name = "B",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
},
new Branch()
{
Id = "3",
Name = "C",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
},
new Branch()
{
Id = "3",
Name = "C",
}
}
}
}
},
new Branch()
{
Id = "2",
Name = "B",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
}
}
}
}
};
InitializeComponent();
this.DataContext = this.Branch;
}
}
结果
所以现在我有一个树状网格视图,最多有 3 级扩展,因为我在另一个数据模板中手动编写了一个嵌套的分层数据模板,我想知道是否有自动添加的方法每当我的 collection 深入扩展时,就可以深入我的树状网格视图。我的项目源也是一个嵌套的 observable collection,其中有分支。
我正在寻找一种递归添加级别而不是手动将它们嵌套在一起的方法。
谢谢。
HierarchicalDataTemplate
应该为您做到这一点。你只需要在TreeView
的DataTemplate
.
我认为我们只需要将 HierachicalDataTemplate
的 ItemsSource
绑定到您的 class 的嵌套 属性 中,它会处理其余部分。
如果我误解了您的意图,请告诉我。
这是我的尝试:
XAML
<TreeView ItemsSource="{Binding Branches}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Branches}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Text="{Binding Id}"></TextBox>
<TextBox Grid.Column="1" Text="{Binding Name}"></TextBox>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
具有嵌套集合的 class
public class Branch
{
public string Id { get; set; }
public string Name { get; set; }
public ObservableCollection<Branch> Branches { get; set; }
}
用于测试目的的主窗体硬编码值
public partial class MainWindow : Window
{
public Branch Branch { get; set; }
public MainWindow()
{
Branch = new Branch()
{
Id = "1",
Name = "A",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "2",
Name = "B",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
},
new Branch()
{
Id = "3",
Name = "C",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
},
new Branch()
{
Id = "3",
Name = "C",
}
}
}
}
},
new Branch()
{
Id = "2",
Name = "B",
Branches = new ObservableCollection<Branch>()
{
new Branch()
{
Id = "3",
Name = "C",
}
}
}
}
};
InitializeComponent();
this.DataContext = this.Branch;
}
}
结果