0

我对 C# / Entity Framework 比较陌生,正在尝试让 Treeview 控件 / HierachicalDataTemplate 与 Entity Framework 4.0 一起使用,但我缺少一些东西。

我有一个自引用表:

除法(PK,int,不为空);divname(nchar(100),不为空);divshortname(nchar(50),不为空);parentid (FK, int, null); orgid (FK, int, not null)

我已将表作为“组织结构”加载到实体框架中,并将自我关系的多面命名为“子”,将单面命名为“父”。

我因此创建了一个 ObservableCollection:

    private ObservableCollection<orghierarchy> _firstgeneration;
    public ObservableCollection<orghierarchy> FirstGeneration
    {
        get
        {
            if (OrgID != 0)
            {
                _firstgeneration = SetDivTree(OrgID);
            }
            return _firstgeneration;
        }

        set
        {
            if (value != _firstgeneration)
                _firstgeneration = value;
        }
    }

    public ObservableCollection<orghierarchy> SetDivTree(int _orgid)
    {
        ObservableCollection<orghierarchy> _temp;
        using (var context = new IFREntities())
        {
            var divs = from orghierarchies in context.orghierarchies.Include("child")
                       where orghierarchies.orgid == _orgid & orghierarchies.parentid == null
                       orderby orghierarchies.divshortname
                       select orghierarchies;

            _temp = new ObservableCollection<orghierarchy>(divs);
        }
        return _temp;
    }

“.Include”似乎通过基于单步执行代码的查询将所有子行带回。

我的 XAML 是

<TreeView x:Name="DivHierarchy" Margin="8" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="3" ItemsSource="{Binding FirstGeneration}" >
<TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding FirstGeneration.child}">
            <TextBlock Text="{Binding divname}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
<TreeView.Background>
    <SolidColorBrush Color="{DynamicResource BigCtrlBackground}"/>
</TreeView.Background>

我的树视图是空的,我不确定问题可能是什么。

4

1 回答 1

0

试试这个 XAML,不包括你想要的所有布局设置。你可以自己做。:)

<TreeView x:Name="DivHierarchy" ItemsSource="{Binding FirstGeneration}" ItemTemplate="{StaticResource RootTemplate}" />

将以下内容添加到资源部分,例如

<Window.Resources>
    <HierarchicalDataTemplate x:Key="ChildTemplate"
                              ItemsSource="{Binding Path=child}">
        <TextBlock Text="{Binding Path=divname}" />
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="RootTemplate"
                              ItemTemplate="{StaticResource ChildTemplate}"
                              ItemsSource="{Binding Path=child}">
        <TextBlock Text="{Binding Path=divname}" />
    </HierarchicalDataTemplate>
</Window.Resources>

我认为它会起作用,但您也会在根级别看到子条目。出色地!试试看。

于 2013-01-20T07:50:23.313 回答