C#/ WPF:想法如何分别显示ListView的最后一行?

时间:2009-08-17 13:31:43

标签: c# wpf listview

我有一个包含大约10个GridViewColumn和大约100行/行的ListView。 我想在ListView底部显示“Total”或摘要行。

有没有人知道如何做到这一点,保持ColumnWidth等与其他人一样,并使其成为一个单独的项目,所以“主”ListView可以有一个滚动条?

我上传了一个模型(抱歉我的图形天才:-)):
image

4 个答案:

答案 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事件。)这有点粗,但除非你基本上推出自己的自定义列表视图控件,否则我不知道你是否会做得更好