0

这是 XAML:

<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 个项目的组),因为井名的体积可能很大,水平或垂直包装都没有帮助。

非常感谢,埃利亚斯

4

3 回答 3

0

好吧,您始终可以向 ViewModel 添加新属性

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

并更改您的 ItemsSource 绑定以改用它。

MSDN上的示例

于 2012-09-27T13:49:47.993 回答
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>
于 2012-09-27T13:59:36.993 回答
0

我不是 100% 确定你在问什么,但听起来你想要连续 5 个按钮,并且每 5 个按钮自动换行到下一行。

要使其与 a 一起使用WrapPanel,您应该为面板提供Width5x 宽度的按钮,以便绘制其中的 5 个,然后换行到下一行

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

如果您提前不知道按钮宽度,另一种选择是使用UniformGrid5 列的 a。我认为您还需要将 Row 计数设置为比您期望的集合更大的值

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

定义行数的另一种方法是在数据模型中公开一个包含您需要的行数的属性,并将 Rows 属性绑定到它。

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

我不记得是否UniformGrid.Rows是 DependencyProperty,但如果不是,那么您可以创建一个AttachedProperty您可以绑定的替代品,这将修改该UniformGrid.Rows属性(例如,请参阅此代码以获取 Grid's Rows and Columns 的 Attached Properties

于 2012-09-27T14:34:46.367 回答