2009-07-22 25 views
1

誰もが折りたたみ可能なリストビューを作成する方法、アイデアを持っていますか?折りたたみ可能なアイテムのListViewですか?

名前、年齢、郡
と次のエントリ::私は列でListViewコントロールをしました

+ Max | 20 | Switzerland
+ Joe | 25 | Germany
+ Bob | 30 | Italy

私は+をクリックすると、私はListViewコントロールのように崩壊したいですこの:
- Max | 20 | Switzerland
Lastname: Eastwood
Phone: 0041 11 222 33 44

任意のヘルプやアイデアのため

+ Joe | 25 | Germany
+ Bob | 30 | Italy

ありがとう!

PS:私の場合、「Person」オブジェクトに応じて2種類のInfosがあります。

- 私は姓+電話番号#
を表示する人もいれば、私はJob + Employerを見ている人もいます。何らかのデータトリガーでも可能でしょうか?

EDIT:

私は、次のコードを編集した:

<ListView ItemsSource="{Binding Path=DisplayedListe, Mode=OneWay}" 
      VirtualizingStackPanel.IsVirtualizing="True" 
      IsSynchronizedWithCurrentItem="True" 
      Sorter:ListViewSorter.IsListviewSortable="True" 
      Name="mainListView" 
      > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <ToggleButton x:Name="ToggleButton" Grid.Column="0" Content="+"/> 
        <Label Grid.Column="1" Content="Max"/> 
        <Label Grid.Column="2" Content="20"/> 
        <Label Grid.Column="3" Content="Switzerland"/> 
       </Grid> 
       <StackPanel Visibility="{Binding ElementName=ToggleButton, Path=IsChecked}"> 
        <Label Content="Lastname: Eastwood"/> 
        <Label Content="Phone: 0041 11 222 33 44"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 

     <!--<ListView.View> 
     <GridView > 
      <GridViewColumn Header="+" DisplayMemberBinding="{Binding Path=IsCollapsible, Mode=OneWay}"/> 
      <GridViewColumn Header="RgNr" DisplayMemberBinding="{Binding Path=RechnungsNr, Mode=OneWay}" /> 
      <GridViewColumn Header="ESR" DisplayMemberBinding="{Binding Path=Length, Mode=OneWay}"/> 
      <GridViewColumn Header="S" DisplayMemberBinding="{Binding Path=Status, Mode=OneWay}"/> 
      <GridViewColumn Header="M" DisplayMemberBinding="{Binding Path=AktuelleMahnStufe, Mode=OneWay}" /> 
     </GridView> 
    </ListView.View>--> 

</ListView> 

これが動作しているようですが、私はColumnHeaderの上でクリックすることで、これはソート可能にすることができる方法を見つけ出すことはできません。 。 何か案は?

答えて

5

単純なデータ型でこれを行うことができます。一番上の行は、最初の列にトグルボタンを配置したグリッド、次にそのボタンのトグルされた値にバインドされた可視性を持つスタックパネルまたはグリッド(レイアウトに依存)です。私はあなたがここで直接ウィンドウに貼り付けることができますが、あなたは、単に十分なDataTemplateに変換することができ、テストレイアウトをやった

、重要な部分は、第二のStackPanelに結合可視性である:

<Window.Resources> 
     <BooleanToVisibilityConverter x:Key="BoolToVis"/> 
    </Window.Resources> 
    <StackPanel> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 
      <ToggleButton x:Name="ToggleButton" Grid.Column="0" Content="+"/> 
      <Label Grid.Column="1" Content="Max"/> 
      <Label Grid.Column="2" Content="20"/> 
      <Label Grid.Column="3" Content="Switzerland"/>   
     </Grid> 
     <StackPanel Visibility="{Binding ElementName=ToggleButton, Path=IsChecked, Converter={StaticResource BoolToVis}}"> 
      <Label Content="Lastname: Eastwood"/> 
      <Label Content="Phone: 0041 11 222 33 44"/> 
     </StackPanel> 
    </StackPanel> 

データテンプレートは、バインドするオブジェクトのタイプに基づいて変更することもできます。異なるレイアウトをオブジェクトタイプにリンクすることができれば、外観を変更するのは簡単です。

+0

ありがとう、これはうまく見えますが、これをListViewにどのように統合できますか(後で並べ替えることができます)? –

+0

これは本当にあなたが現時点で持っているものに依存します。Martin Liversageが解答で説明しているように、これをデータテンプレートとして設定し、アイテムソースをListViewにバインドすると、ソースの各アイテムに対してこのテンプレートが繰り返されます。リストビュー自体でソートを処理できます(http://www.switchonthecode.com/tutorials/wpf-tutorial-using-the-listview-part-2-sorting) –

+0

お返事ありがとうございます。私はそれを組み合わせてみましたが、私はどのように(私はソートに必要な)そのメソッドでColumnHeaderを取得するのか分からないのですか? PS:私の質問の下にコードを掲載しました –

-1

ListViewItemTemplateを変更して、あなたが記述したとおりに動作するコンテンツを作成することができます。簡単にXAMLを次のように記述する必要があります。

関連する問題