【问题标题】:LINQ to SQL as databinding source for WPF TreeviewLINQ to SQL 作为 WPF Treeview 的数据绑定源
【发布时间】:2009-11-13 14:25:55
【问题描述】:

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

我有一个带有相关表的 SQL 数据库,并且我在我的应用程序的其他区域中成功地使用了 LINQ to SQL,但我对层次树视图有点卡住了。

我只想使用来自数据库的 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>

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • P.S.我实际上并不了解 LINQ to SQL,因此您必须阅读 MSDN 以了解包含相关对象的正确方法,但已给出“指针”:)
    • 感谢您的提示,我感觉其他表无法正常查看存在问题。研究使用“包含”语句的最佳方式,这似乎是它自己的一个小雷区......
    • 查看this 教程中的关系主题 - 有一些示例如何做到这一点。像这样:DataShape ds = new DataShape(); ds.LoadWith(c => c.Orders); db.Shape = ds; var q = from c in db.Customers where c.City == "London" select c; HTH。
    • 对于以后关注此主题的任何人,我在这里找到了一些非常有用的信息:scip.be/index.php?Page=ArticlesNET09 感谢 archimed7592 引导我朝着正确的方向前进!
    猜你喜欢
    • 2011-01-08
    • 2011-01-11
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    相关资源
    最近更新 更多