0

我是 Visual Studio (2010) 和 Expression Studio (4) 的新手。

我一直在尝试让 TreeView 连接到我在 Visual Studio 中连接的 .mdb 数据库(使用 Silverlight 业务应用程序),以显示每个表中名称属性的导航树。我有 2 个层次结构:

(有比显示更多的属性,但这些是唯一需要的)

  1. 根级别:位置表[LocationName 属性]
  2. 第一级:面积表[AreaName 属性] [LocationID]
  3. 第二级:检查表 [InspectionName 属性] [AreaID]

我尝试了许多连接方式,但似乎都没有效果 - 现在我很高兴制作一个 TreeView 模板,该模板连接到在 Expression Blend 中创建的分层样本数据。不幸的是,我似乎只能与我的真实数据库的顶层建立连接——所以它只显示位置的名称,不会进一步扩展。

我不知道该怎么做。我正在使用的代码是:(没有代码隐藏)

主页.xaml

 <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:Location, CreateList=true}" Height="0" LoadedData="locationDomainDataSource_LoadedData_1" Name="locationDomainDataSource" QueryName="GetLocationsQuery" Width="0">
     <riaControls:DomainDataSource.DomainContext>
          <my:InspectDomainContext />
     </riaControls:DomainDataSource.DomainContext>
 </riaControls:DomainDataSource>

 <sdk:TreeView Height="200" ItemsSource="{Binding ElementName=locationDomainDataSource, Path=Data}" Name="locationTreeView1" Width="200" >
      <sdk:TreeView.Resources>
           <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                     <ResourceDictionary Source="NavigationTreeResourceDictionary.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
       </sdk:TreeView.Resources>
       <sdk:TreeView.ItemTemplate>
            <StaticResource ResourceKey="RootLevel"/>
       </sdk:TreeView.ItemTemplate>
   </sdk:TreeView>

导航树资源字典

 <common:HierarchicalDataTemplate x:Key="Level2">
     <StackPanel Orientation="Horizontal">
         <TextBlock Margin="5,0,3,0" 
               FontStyle="Italic" 
               Text="{Binding Path=Name}" />                    

     </StackPanel>
 </common:HierarchicalDataTemplate>

 <common:HierarchicalDataTemplate x:Key="Level1"                 
    ItemsSource="{Binding Path=Inspections}"
    ItemTemplate="{StaticResource Level2}">
     <StackPanel Orientation="Horizontal">
         <TextBlock Margin="5,0,3,0" 
               Text="{Binding Path=Name}" />

     </StackPanel>
 </common:HierarchicalDataTemplate> 

 <common:HierarchicalDataTemplate x:Key="RootLevel"
     ItemsSource="{Binding Path=Areas}"
     ItemTemplate="{StaticResource Level1}">
     <StackPanel Orientation="Horizontal">
         <TextBlock Margin="5,0,3,0"
               Text="{Binding Path=Name}" 
               FontWeight="Bold" FontSize="12" />
     </StackPanel>
 </common:HierarchicalDataTemplate>

域服务 (c#) GetLocationsQuery

 public IQueryable<Location> GetLocations()
    {
        return this.ObjectContext.Locations.OrderBy(l=>l.Name);
    }

这可能与使用的查询有关吗?我应该将树视图所需的信息放在 GetLocationsQuery 中吗?

  • 如果是这样,我如何输入查询以返回位置名称、子区域名称和子检查名称的列表?

先感谢您。

4

1 回答 1

0

已经找到解决方案,我会在需要的情况下为其他人发布:

需要更改的是域服务和元数据信息 =>

在元数据文件中,您希望服务传回的表中的每个 EntityCollection 都需要 [Include] 例如:

位置表

[Include]
public EntityCollection<Area> Areas { get; set; }

区域表

[Include]
public EntityCollection<Inspection> Inspections { get; set; }

检查表

[Include]
public EntityCollection<InspectionItem> InspectionItems { get; set; }

在域服务文件中,使用的查询需要:

public IQueryable<Location> GetLocationsAndSubCategories()
    {
        return this.ObjectContext.Locations.Include("Areas.Inspections");
    }

其中每个“.Entity”是已包含在元数据文件中的集合实体的名称。

回到 xaml - 只要绑定路径名称与 EntityCollection 名称相同,它就应该与代码一起使用。

:) 希望有用

于 2012-05-08T12:54:06.143 回答