2012-09-27 6 views
0

Это XAML:Сплит элементы с помощью ItemsControl

<ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=ScenarioName}" Header="Scenario Name" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=ScenarioType}" Header="Scenario Type" /> 
       <GridViewColumn Header="Well names" Width="175"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <ItemsControl ItemsSource="{Binding Path=Wells}"> 
            <ItemsControl.ItemsPanel> 
             <ItemsPanelTemplate> 
              <WrapPanel Orientation="Vertical"/> 
             </ItemsPanelTemplate> 
            </ItemsControl.ItemsPanel> 
            <ItemsControl.ItemTemplate> 
             <DataTemplate> 
              <StackPanel> 
               <!--<TextBlock Text="{Binding}"/>-->             
                <Button Width="60" Margin="0 0 0 3">Test 1</Button> 

               </StackPanel> 
             </DataTemplate> 
            </ItemsControl.ItemTemplate> 
           </ItemsControl> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=StartPeriod}" Header="Start period" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=EndPeriod}" Header="End period" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Lagged}" Header="Lagged" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Detrended}" Header="Detrended" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=MinimumMonths}" Header="Length of continuous months" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=CorrelatedWells}" Header="Correlated wells" /> 
        <GridViewColumn Header="Excluded Wells"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <ItemsControl ItemsSource="{Binding Path=ExcludedWells}"> 
             <ItemsControl.ItemsPanel> 
              <ItemsPanelTemplate> 
               <WrapPanel Orientation="Vertical"/> 
              </ItemsPanelTemplate> 
             </ItemsControl.ItemsPanel> 
             <ItemsControl.ItemTemplate> 
              <DataTemplate> 
               <StackPanel> 
                <TextBlock Text="{Binding}"/> 
               </StackPanel> 
              </DataTemplate> 
             </ItemsControl.ItemTemplate> 
            </ItemsControl> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
     </ListView.View> 
    </ListView> 

И это выглядит следующим образом:

http://tinypic.com/view.php?pic=xpse8n&s=6

Рассматриваются вопросы, является ли там легко группировать кнопки «test1» под Колодец имена (в группах, скажем, 5 пунктов), потому что объем имен колодцев может быть довольно большим, и ни горизонтальная, ни вертикальная упаковка не помогают.

большое спасибо, Элиас

ответ

0

Ну вы всегда можете добавить новое свойство к вашему ViewModel

public IEnumerable<Well> SomeWells 
{ get { return Wells.Take(5); } 

и изменить ItemsSource связывания использовать это вместо.

Пример здесь MSDN

0

Вы можете использовать ListBox, чтобы свитка пользователем с помощью кнопок, как:

<GridViewColumn Header="Well names" Width="175"> 
    <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <ListBox> 
        <ListBox.ItemTemplate> 
          <DataTemplate> 
           <Button></Button> 
          </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 
0

Я не 100% уверен, что вы просите, но это похоже, что вы хотите что-то вроде 5 кнопок подряд и автоматически обертываете в следующую строку каждые 5 кнопок.

Чтобы заставить его работать с WrapPanel, вы должны дать вашу панель Width что 5x с шириной кнопок, так что привлечет 5 из них, а затем обернуть на следующую строку

<ItemsPanelTemplate> 
    <WrapPanel Width="300" Orientation="Vertical"/> 
</ItemsPanelTemplate> 

Другими альтернативной если вы не знаете, что ваша ширина кнопки раньше времени должна использовать UniformGrid с 5 столбцами. Я думаю, вы также должны установить посчитать строки в нечто большее, чем вы когда-либо ожидать, что ваша коллекция будет

<ItemsPanelTemplate> 
    <UniformGrid Columns="5" Rows="100" /> 
</ItemsPanelTemplate> 

Другой альтернативой для определения количества строк, чтобы выставить свойство в модели данных, которая содержит количество строк вам понадобится и привязать к ним свойство Rows.

<ItemsPanelTemplate> 
    <UniformGrid Columns="5" Rows="{Binding RowCount}" /> 
</ItemsPanelTemplate> 

Я не могу вспомнить, если UniformGrid.Rows является DependencyProperty или нет, но если нет, то вы можете создать AttachedProperty вместо этого можно привязать и что изменит UniformGrid.Rows свойства (для примера см this code for Attached Properties for a Grid's Rows and Columns)

Смежные вопросы