LINQ to SQL作为WPF Treeview的数据绑定源

时间:2009-11-13 14:25:56

标签: wpf linq-to-sql data-binding treeview

我想知道是否有人可以提供以下的简单示例。 (最好是在VB.Net中):

我有一个带有相关表的SQL数据库,我在我的应用程序的其他方面成功使用了LINQ to SQL,但我对Heirarchical Treeview有点困惑。

我只想使用数据库中的LINQ查询作为WPF Treeview的源代码。如果我可以将树视图的ItemsSource设置为我的LINQ结果,只需将树视图项目的数据绑定设置为可以使我的日子成为各种各样的列,但我似乎无法将其烹饪。

花了几个小时搜索网后,我发现很多例子都没有显示这一点。我找到了类似的想法,但对于像我这样的新手来说,没有什么简单和具体的。

据我了解,在执行LINQ查询时,DBML文件中定义的关系应保持不变。那么,我可以将这样的东西作为Treeview的ItemsSource吗?

Dim pdc As New ProjectDataContext()  
Public Property Selection() As Integer

Dim tree = From c In pdc.Customers _
           Where c.CustomerID = _Selection _
           Select c

projecttreeview.ItemsSource = tree

然后,TreeView项的数据绑定可能只是父节点的{Binding CustomerName},并将{Binding Orders.OrderName}称为子节点。例如:

<TreeView Name="projecttreeview">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Customers}">
      <TextBlock.Text="Binding CustomerName}"/>
        <HierarchicalDataTemplate.ItemTemplate>
          <DataTemplate>
            <TextBlock.Text="{Binding Orders.OrderName}"/>
          </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>
      </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

显然,这并不像我想的那样简单。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

首先,让我澄清您可能会遇到的一个问题:当您将查询用作ItemsSource时,ItemsControl将在您重新运行查询后不会反映任何更改因此,将ItemsSource分配给查询非常类似于将其分配给转换为数组的查询结果。

其次,要访问相关的对象/集合(无论您从哪里进行 - 将是DataTemplate还是简单的代码),您必须在创建查询时明确指出它。在实体框架中,您可能会通过Include方法执行此操作:treeview.ItemsSource = tree.Include("Orders") - 它将强制引擎对数据库进行JOIN SQL查询。