我有一个包含大约10个GridViewColumn和大约100行/行的ListView。 我想在ListView底部显示“Total”或摘要行。
有没有人知道如何做到这一点,保持ColumnWidth等与其他人一样,并使其成为一个单独的项目,所以“主”ListView可以有一个滚动条?
我上传了一个模型(抱歉我的图形天才:-)):
image
答案 0 :(得分:6)
这是一个关于如何在结尾处使用总计区域的列表视图的示例。列宽在每列与其总数
之间绑定 <Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1"
x:Name="ctl"
Height="300"
Width="300">
<Window.Resources>
<GridViewColumnCollection x:Key="gvcc">
<GridViewColumn Width="{Binding Path=ActualWidth, ElementName=col1}"
Header="Date" />
<GridViewColumn Width="{Binding Path=ActualWidth, ElementName=col2}"
Header="Day Of Week"
DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn Width="{Binding Path=ActualWidth, ElementName=col3}"
Header="Year"
DisplayMemberBinding="{Binding Year}" />
</GridViewColumnCollection>
</Window.Resources>
<Grid>
<DockPanel HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
LastChildFill="True">
<GridViewRowPresenter Name="listview_total"
DockPanel.Dock="Bottom"
Margin="0,5,0,5"
Columns="{StaticResource gvcc}">
<GridViewRowPresenter.Content>
<sys:DateTime>2005/2/1</sys:DateTime>
</GridViewRowPresenter.Content>
</GridViewRowPresenter>
<ListView x:Name="listview_rows"
SelectionMode="Single"
DockPanel.Dock="Top"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.View>
<GridView>
<GridViewColumn x:Name="col1"
Header="Date" />
<GridViewColumn x:Name="col2"
Header="Day Of Week"
DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn x:Name="col3"
Header="Year"
DisplayMemberBinding="{Binding Year}" />
</GridView>
</ListView.View>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
</ListView>
</DockPanel>
</Grid>
</Window>
答案 1 :(得分:2)
建立federubin's excellent answer,您可以将GridViewRowPresenter
的{{1}}媒体资源直接绑定到Columns
的{{1}}媒体资源。
Columns
列&#39;当在主网格中更改宽度并且您不再需要复制列定义时,宽度将在演示者中自动更新。
GridView
答案 2 :(得分:1)
如果您的数据源是StaticResource,则可以使用复合集合。我真的希望这可以在其他地方工作。伤心,真的。无论如何,如果你可以使用它真的很好。
<ListView>
<ListView.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{StaticResource MyCollection} />
<ListViewItem>Last Item</ListViewItem>
</CompositeCollection>
</ListView.ItemsSource>
</ListView>
享受!
答案 3 :(得分:0)
看起来你想要的是第一个下面的第二个列表视图,以某种方式保持列大小同步。是否有可以挂钩的事件让您知道用户已调整特定列的大小? (我不是真正的WPF人,但WinForms提供了ColumnSizeChanged和ColumnSizeChanging事件。)这有点粗,但除非你基本上推出自己的自定义列表视图控件,否则我不知道你是否会做得更好