【发布时间】:2014-04-03 12:49:22
【问题描述】:
我有一个树视图,如果它有孩子,它会返回多个实例。
这是使用 C# WPF .Net 4.5 应用程序的照片。
我正在做这样的事情
这是我的实体类
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; }
}
视图模型看起来像这样
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文件
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>
【问题讨论】: