2009-08-17 19 views
4

我已經與約10 GridViewColumn的大約100行/列一個ListView。 我想在ListView的底部顯示「總計」或彙總行。C#/ WPF:想法如何分別顯示ListView的最後一行?

有沒有人有一個想法如何做到這一點,以保持columnWidth時等和其他人一樣,並使其成爲一個單獨的項目,所以「主」的ListView可以有一個滾動條?

我在這裏已經上傳了一個實體模型(我不好的圖形人才:-)不好意思):
image

+0

有一隻老鼠...... – cakeforcerberus 2009-08-17 13:47:52

+0

@semirhage:這是什麼意思? – 2009-08-17 13:51:22

回答

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> 
0

它似乎像你想要的是下面的第一個第二個列表視圖,用一些保持列大小同步的方式。是否有可以勾選的事件讓您知道用戶已調整特定列的大小? (我不是一個真正的WPF人,但的WinForms提供ColumnSizeChanged和ColumnSizeChanging事件。)這是一個有點嚴重,但除非你本質上推出自己的自定義ListView控件,我不知道,如果你打算做的更好。

+0

沒錯,這就是我正在尋找..感謝輸入,我覺得這是不是一個「容易」 /清潔的方式(例如無代碼隱藏/使用單獨的事件)。 – 2009-08-17 13:49:51

1

如果您的數據源是一個靜態資源,您可以使用複合式集合。我真的希望這可以在別處工作。可悲,真的。無論如何,如果你可以使用它真的很好。

<ListView> 
    <ListView.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer Collection="{StaticResource MyCollection} /> 
      <ListViewItem>Last Item</ListViewItem> 
     </CompositeCollection> 
    </ListView.ItemsSource> 
</ListView> 

Enjoy!

0

構建關閉federubin's excellent answer之間綁定,則可以將GridViewRowPresenterColumns屬性直接綁定到GridViewColumns屬性。

<GridViewRowPresenter Columns="{Binding ElementName=ListViewGridViewName, Path=Columns}" ...> 

列的寬度會自動在演示時,他們在主電網發生變化進行更新,你不再需要複製你的列定義。

<Window x:Class="WpfTestbed.MainWindow" 
     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"> 
    <Grid> 
    <DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LastChildFill="True"> 

     <GridViewRowPresenter Columns="{Binding ElementName=ListViewGridView, Path=Columns}" DockPanel.Dock="Bottom" Margin="4,5,0,5"> 
     <GridViewRowPresenter.Content> 
      <sys:DateTime>2005/2/1</sys:DateTime> 
     </GridViewRowPresenter.Content> 
     </GridViewRowPresenter> 

     <ListView SelectionMode="Single" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ListView.View> 
      <GridView x:Name="ListViewGridView"> 
      <GridViewColumn Header="Date" /> 
      <GridViewColumn Header="Day Of Week" DisplayMemberBinding="{Binding DayOfWeek}" /> 
      <GridViewColumn 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>