C# Treeview绑定到可观察集合时不显示项目

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

我试图在wpf中的树状视图中显示层次结构数据。db表是一个自映射表- 引用Employee表

当我绑定到Xaml中的可观察集合时,没有显示任何内容

下面是一个示例视图模型

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。