0

私はC#/ Entity Frameworkに比較的慣れておらず、Entity Framework 4.0で動作するTreeviewコントロール/ HierachicalDataTemplateを取得しようとしていますが、何かが欠けています。

私は自己参照テーブルを持っています:

除算 (PK、int、null 以外); divname (nchar(100), not null); divshortname (nchar(50)、null ではない); 親 ID (FK、int、null); orgid (FK、int、null 以外)

テーブルを「orghierarchy」としてエンティティ フレームワークにロードし、自己関係の多くの側を「子」、単一の側を「親」と名付けました。

次のように 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}" />

Resources セクションに以下を追加します。

<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 に答える