C# Treeview绑定到可观察集合时不显示项目
我试图在wpf中的树状视图中显示层次结构数据。db表是一个自映射表- 引用Employee表 当我绑定到Xaml中的可观察集合时,没有显示任何内容 下面是一个示例视图模型C# Treeview绑定到可观察集合时不显示项目,c#,wpf,treeview,observablecollection,C#,Wpf,Treeview,Observablecollection,我试图在wpf中的树状视图中显示层次结构数据。db表是一个自映射表- 引用Employee表 当我绑定到Xaml中的可观察集合时,没有显示任何内容 下面是一个示例视图模型 public class EmployeeViewModel : ViewModel { public class EmployeeList { public Employee Employees { get; set; } public
public class EmployeeViewModel : ViewModel
{
public class EmployeeList
{
public Employee Employees { get; set; }
public IEnumerable<EmployeeList> EmployeeChildren { get; set; }
}
private readonly ObservableCollection<EmployeeList> _EmployeeLists = new ObservableCollection<EmployeeList>();
//property
public ObservableCollection<EmployeeList> EmployeeHierarchy
{
get
{
return _EmployeeLists;
}
}
//This is inside a method to make the db call
try
{ //Grab Employees from db using Wcf and EF
WcfProxy.Using(delegate(IMyService client)
{
_EmployeeLists.Clear();
var query = client.GetEmployees();
var results = GetEmployeesHierachy(query.AsEnumerable(), null).ToList();
});
}
catch (Exception e)
{
throw e;
}
}
//Method to build hierarchy
public IEnumerable<EmployeeList> GetEmployeesHierachy(IEnumerable<Employee> allEmployees, Employee parentEmployee)
{
int? parentEmployeeId = null;
if (parentEmployee != null)
parentEmployeeId = parentEmployee.EmployeeId;
var childEmployees = allEmployees.Where(e => e.EmployeeParentId == parentEmployeeId);
foreach (var emp in childEmployees)
_EmployeeLists.Add(new EmployeeList() { Employees = emp, EmployeeChildren = GetEmployeesHierachy(allEmployees, emp) });
return _EmployeeLists;
}
}
公共类EmployeeViewModel:ViewModel
{
公共类雇员名单
{
公共雇员雇员{get;set;}
公共IEnumerable EmployeeChildren{get;set;}
}
私有只读ObservableCollection_EmployeeLists=新ObservableCollection();
//财产
公共可见集合雇员层次结构
{
收到
{
返回员工名单;
}
}
//这是在进行db调用的方法中
尝试
{//使用Wcf和EF从db抓取员工
使用(委托(IMyService客户端)
{
_EmployeeLists.Clear();
var query=client.GetEmployees();
var results=GetEmployeesHierachy(query.AsEnumerable(),null.ToList();
});
}
捕获(例外e)
{
投掷e;
}
}
//方法来构建层次结构
公共IEnumerable GetEmployeesHierachy(IEnumerable allEmployees,Employee parentEmployee)
{
int?parentEmployeeId=null;
if(parentEmployee!=null)
parentEmployeeId=parentEmployee.EmployeeId;
var childEmployees=allEmployees.Where(e=>e.EmployeeParentId==parentEmployeeId);
foreach(儿童员工中的var emp)
_Add(new EmployeeList(){Employees=emp,EmployeeChildren=GetEmployeesHierachy(allEmployees,emp)});
返回员工名单;
}
}
这是xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="325" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TreeView Name="ItemTreeView"
ItemsSource="{Binding Path=EmployeeHierarchy}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Employees}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontFamily="Segoe UI" FontSize="14"
Text="{Binding Path=Name1, StringFormat='Employee Full Name {0}'}" Padding="2"
Width="200" />
<TextBlock Grid.Column="1" FontFamily="Segoe UI" FontSize="14" Padding="2" />
</Grid>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
EF正在以字符串形式从my textblock绑定到的Employee实体返回Name1
我使用的员工实体中的3个属性是EmployeeId、EmployeeParentId和Name
我是否缺少xaml中的某些内容?在Visual Studio中调试并查看输出窗口。那里应该有
System.Windows.Data
错误,这些错误会准确地告诉您出了什么问题。另外,您是否可能正在从非UI线程(即WcfProxy
回调)修改可观察的集合?这是不受支持的(WPF4.5中除外,还有一些附加代码)。我在输出中看到的只是一个情节提要错误。没有System.Windows.Data您是否已将EmployeeViewModel设置为control anywhere的DataContext?Employees仅为1名员工。HierarchycalDataTemplate的ItemsSource应绑定到EmployeeChildren。