2011-07-25 15 views
2

私はWPFとデータバインディングが初めてです。私はリスト(Of Names)とエキスパンダのコンテンツをリスト(Of Services)にバインドする必要があります。私はリストを持っているApplication.vb私は私のメインクラスでwpfリストボックスとリスト項目のネストされたデータバインド

------------- 
class Person 

name as string 
List servies as List (Of Services) 

end class 
-------------- 
class Service 

name as string 
end class 
---------------- 

を持っている(など、どのように、どこstaticResourceを使用するパス)データバインディングにMSのチュートリアルを読んだ後

さらに混乱していますPersonオブジェクトの数

p1 as List(of Person) 

すべてをダミー値に初期化します。 Application.xamlで 、私は彼らのサービスに人物の名前と内側リストボックス項目にヘッダーテキストブロックをバインドするにはどうすればよい

<Expander Name="listBox4" VerticalAlignment="Top" 
HorizontalAlignment="Left" Header=" {Binding}" Content="{Binding}" > 

    <Expander.HeaderTemplate > 

     <DataTemplate> 
     <TextBlock Text="{Binding}"/> 
     </DataTemplate> 

    </Expander.HeaderTemplate> 

    <Expander.ContentTemplate> 

     <DataTemplate > 
     <ListBoxItem Content="{Binding}"/> 
     </DataTemplate> 

    </Expander.ContentTemplate>     

</Expander > 

がありますか?

答えて

3

オブジェクトのリストで作業しているので、ItemsControlを使用する必要があります。

<ItemsControl ItemsSource="{Binding PersonList}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Expander Header="{Binding Name}"> 
       <ListBox ItemsSource="{Binding Services}" /> 
      </Expander> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

をこれはPersonListを通って、それぞれのために行くと言うループを作成します。パンダはItemsControlsがリストまたはコレクション

で動作することを意図している間あなたのコードは次のようになります、1のDataContextに対処することができますそれはPersonの名前に等しいHeaderとExpanded ContentをそのPersonのサービスのすべてを表示するListBoxと等しいExpanderを生成する人です。

+0

私のApplication.vb内の変数を参照することはできません。ここではそれらを と呼びます。または、XAMLで{バインディング}のみを使用してプログラムでこれを行う方法がありますか? – heyNow

+1

私はあなたが何を意味しているか分かりません。 'ItemsControl'が保持しているコンテナは、その' DataContext'をあなたのリストに設定する必要があります。例えば、MainWindowのロードされたイベントに 'Me.MainWindow.DataContext = p1'を入れることができます。 DataContextが設定されると、そのDataContextの任意のプロパティにアクセスできます。DataContextがPersonオブジェクトの場合、 '{Binding Name}'または '{Binding Name}'を使用して 'Person.Services'を使用して' Person.Name'にバインドできます。バインディングサービス} ' – Rachel

+0

ねえ、ありがとう!私はちょうどDataContextが何であるかの手を得ることです。私はあなたが言ったことをして、toStringメソッドを覆し、それは働いた!追加の質問、私はすべてのものをに入れました。このグリッドに複数のデータコンテキストを持たせることはできますか? – heyNow

関連する問題