2012-05-07 20 views
1

ListViewは、この列がExpanderである単一の列を持つ必要があります。私はヘッダーは、それがでバインドされますエキスパンダーオブジェクトとリストビューを入力する必要がありListViewとしてのエキスパンダー

List<MyItemT> Mylist = new List<MyItemT>(); 

public class MyItemT 
{ 
    public string Title { get; set; } 
    public TextBlock Info { get; set; } 
} 

そして、これらのオブジェクトのリスト:

は特に、私はこのようなクラスを持っていますタイトルとInfoプロパティを持つコンテンツ。例えば

このようなパンダのリストビュー:

<Expander Header="My Expander"> 
    <TextBlock TextWrapping="Wrap"> 
     Lorem ipsum dolor sit amet, consectetur 
     adipisicing elit, sed do eiusmod tempor incididunt ut 
     labore et dolore magna aliqua 
    </TextBlock> 
</Expander> 

My Expander

...というように(私のListViewの要素があるとして多くの)...

ListViewはヘッダーバーを持つべきではありません。もちろん、すべてがプログラムによって行われます。

どうすればよいですか?おかげさまで

答えて

2

ListViewのItemTemplateを定義し、Expanderを内部に配置するだけです。これは少なくともListView内の他のコントロールでも機能するので、ここでもうまくいくはずです。

<ListView ItemsSource="{Binding YourSource}" Name="listView"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <Expander Header="{Binding Title}"> 
     <TextBlock TextWrapping="Wrap" Text="{Binding Info}" /> 
     </Expander> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

このようなコードでバインドすることもできます。

List<MyItemT> Mylist = new List<MyItemT>(); 
listView.ItemsSource = Mylist; 

変更する必要があることは、Infoプロパティのタイプです。文字列型である必要があります。

あなたのクラスはINotifyPropertyChangedを実装する必要があります。そうしないと、バインディングが正しく機能しないことがあります。

+0

ItemSourceはListViewプロパティではありません。 "YourSource"とは、MyItemTのMyListを意味しますか? – gliderkite

+0

@gliderkite:これはエディタでコーディングするためのものです。それは 'ItemsSource'(もう1つは 's')でなければなりません。そして、はい、あなたのタイプのリストになります。 – shriek

+0

ありがとう、それは動作します:) – gliderkite

関連する問題