2012-03-02 19 views
0

私は表示するViewModelsの任意の数を持っているので、そのViewModelを2つの列に表示します。最初の列はほとんどが名前/説明を表示し、2番目の列の内容は変化します。最初の列にはWidth = "auto"、2列目にはWidth = "*"というGridのようなレイアウトが好きです。私はどのItemControlを選択する必要がありますか?

GridViewListViewを試しましたが、いくつかの欠陥があります。

  • 私は(必要はありません)ListViewItem
  • GridViewColumns
  • GridViewColumnsGridようWidth = "*"をサポートしていない(無駄なスペース/必要はない)ヘッダを有し、したがって、すべての利用可能なを使用しないを選択することができます私はGridを使用することができますスペース

が、私はすべてのビューモデルのためGrid.RowDefinitionsを追加する必要がありますし、を設定することはできない以上バインディングによるプロパティ。

私もStackPanelを使用すると考えましたが、テンプレートはサポートされていません。最初の列にWidthを同期する方法がわかりません。

だから誰でもこの目的に最も適しているのは誰ですか?ItemControlです。

答えて

1

これをテストすることなく、データテンプレートを持つItemsControlが適切なソリューションになると期待しています。 親要素(この場合はItemsControl)でGrid.IsSharedSizeScope = "true"を使用し、SharedSizeGroup = "somename"を使用して最初の列の幅を同期させることができます。

<Grid> 
    <Grid.Resources> 
     <DataTemplate x:Key="itemTemplate" DataType="{x:Type MyItemType}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition SharedSizeGroup="column1" Width="Auto"/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 

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

       <!-- More stuff here --> 
      </Grid> 
     </DataTemplate> 
    </Grid.Resources> 
    <ItemsControl Grid.IsSharedSizeScope="True" ItemTemplate="{StaticResource itemTemplate}" /> 
</Grid> 
+0

をなぜ私はいつも 'ShardeSizeGroup'と' IsSharedSizeScope'が存在するような何かを忘れていますか?ありがとう。 –

1

私はこのようなテンプレートとしてグリッドとリストボックスを使用します。

<ListBox ItemsSource="{Binding SomeData}" HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <TextBlock Text="{Binding Data1}" Grid.Column="0"></TextBlock> 
         <TextBlock Text="{Binding Data1}" Grid.Column="1"></TextBlock> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
関連する問題