HierarchicalDataTemplate
должен сделать это для вас. Вам нужно определить его только один раз в TreeView
DataTemplate
.
Я думаю, нам нужно только связать HierachicalDataTemplate
s ItemsSource
во вложенное свойство вашего класса, и оно позаботится обо всем остальном.
Если я что-то не так понял относительно вашего намерения, пожалуйста, дайте мне знать.
Вот моя попытка:
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>
Класс с вложенной коллекцией
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;
}
}
Результат