0

私は Visual Studio (2010) と Expression Studio (4) の初心者です。

Visual Studio で (Silverlight ビジネス アプリケーションを使用して) 接続した .mdb データベースに TreeView を接続して、各テーブルの名前プロパティのナビゲーション ツリーを表示しようとしています。私は2レベルの階層を持っています:

(表示されている以外にも多くのプロパティがありますが、必須のプロパティはこれらだけです)

  1. ルート レベル:ロケーション テーブル[LocationName プロパティ]
  2. 第 1 レベル:エリア テーブル[AreaName プロパティ] [LocationID]
  3. 第 2 レベル:検査表 [InspectionName プロパティ] [AreaID]

接続するために多くの方法を試しましたが、どれもうまくいかないようです.Expression Blendで作成された階層的なサンプルデータへの接続を備えたTreeViewテンプレートを作成できて、とても満足しています. 残念ながら、実際のデータベースの最上位レベルにしか接続できないようです。そのため、場所の名前のみが表示され、それ以上展開されません。

どうすればいいのかわかりません。私が使用しているコードは次のとおりです:(コードビハインドなし)

ホーム.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]
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 に答える