Hello,
I have a treeview that is displaying the results like this? I Do not want to show the children at the root level. Is this a xaml binding error?
I Have a EF Class that looks like this.
public class Employee { public Employee() { this.Employees1 = new HashSet<Employee>(); } public int EmployeeId { get; set; } public Nullable<int> ParentId { get; set; } public string Employee1 { get; set; } public virtual ICollection<Employee> Employees1 { get; set; } public virtual Employee Employee2 { get; set; } }
VM Like This
private readonly ObservableCollection<Employee> _employees = new ObservableCollection<Employee>(); public ObservableCollection<Employee> Employees { get { return _employees; } } public EmployeeViewModel() { } public EmployeeViewModel(object owner) { LoadEmployees(); } public void LoadEmployees() { try { var list = new ObservableCollection<Employee> { new Employee {EmployeeId = 1, Employee1 = "Emp 1", ParentId = null}, new Employee {EmployeeId = 2, Employee1 = "Emp 2", ParentId = 1}, new Employee {EmployeeId = 3, Employee1 = "Emp 3", ParentId = 2}, new Employee {EmployeeId = 4, Employee1 = "Emp 4", ParentId = 3}, new Employee {EmployeeId = 5, Employee1 = "Emp 5", ParentId = null}, new Employee {EmployeeId = 6, Employee1 = "Emp 6", ParentId = null}, new Employee {EmployeeId = 7, Employee1 = "Emp 7", ParentId = 6}, new Employee {EmployeeId = 8, Employee1 = "Emp 8", ParentId = null}, new Employee {EmployeeId = 9, Employee1 = "Emp 9", ParentId = 8}, new Employee {EmployeeId = 10, Employee1 = "Emp 10", ParentId = null} }; list.ForEach(t => _employees.Add(t)); ProcessRootNodes(); } catch (Exception e) { throw e; } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } private void ProcessRootNodes() { var rootNodes = _employees.Where(x => x.ParentId == null).ToList(); foreach (Employee t in rootNodes) { t.Employees1 = this.AddChildren(t); } } private List<Employee> AddChildren(Employee entry) { var children = _employees.Where(x => x.ParentId == entry.EmployeeId).ToList(); foreach (Employee t in children) { t.Employees1 = this.AddChildren(t); } return children; }
Xaml .CS Like this
public MainWindow() { InitializeComponent(); Loaded += OnLoaded; } public void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { DataContext = new EmployeeViewModel("Object"); }
Xaml
<UserControl.Resources><HierarchicalDataTemplate x:Key="NodeTemplate" ItemsSource="{Binding Employees1}"><TextBlock Text="{Binding Employee1}"/></HierarchicalDataTemplate></UserControl.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="325" /><ColumnDefinition Width="Auto" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><telerik:RadTreeView x:Name="radTreeView" Margin="8" ItemsSource="{Binding Employees}" ItemTemplate="{StaticResource NodeTemplate}"/> </Grid>