这是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
问题在于是否可以轻松地将Well1名称下的“Test1”按钮分组(分组,比如5个项目),因为井名的数量可能非常大,水平和垂直包装都没有帮助。
非常感谢, 利亚答案 0 :(得分:0)
您可以随时向ViewModel添加新属性
public IEnumerable<Well> SomeWells
{ get { return Wells.Take(5); }
并更改您的ItemsSource绑定以改为使用它。
上的示例答案 1 :(得分: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>
答案 2 :(得分:0)
我不是百分之百确定你要问的是什么,但听起来你想要连续5个按钮,并且每5个按钮自动换行到下一行。
要使其与WrapPanel
一起使用,您应该为面板指定一个Width
,其宽度为按钮的5倍,以便绘制其中的5个,然后换行到下一行
<ItemsPanelTemplate>
<WrapPanel Width="300" Orientation="Vertical"/>
</ItemsPanelTemplate>
如果您提前知道按钮宽度,另一种方法是使用带有5列的UniformGrid
。我认为您还需要将行计数设置为比您预期的集合更大的
<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)