2009-08-17 34 views
4

私は約10 GridViewColumnと約100行/行のListViewを持っています。 "Total"または要約行をListViewの下部に表示したいとします。C#/ WPF:ListViewの最後の行を個別に表示する方法はありますか?

他の人のようにColumnWidthなどを保持し、それを別のアイテムにすることで、 "main" ListViewがスクロールバーを持つことができるように、どのようにするのか考えている人はいますか?

私はここに(私の悪いグラフィック才能:-)のため申し訳ありません)モックアップをアップロードしました:
image

+0

ラットがあります。 – cakeforcerberus

+0

@semirhage:それはどういう意味ですか? –

答えて

6

これは、最後に合計領域を持つリストビューを作成する方法の例です。列幅は、各列とfederubin's excellent answerをオフに構築

<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

それはほとんどいくつかと、最初の1以下の第二のListViewが何であるかをあなたが望むように思えますカラムサイズを同期させて保持する方法。ユーザーが特定の列のサイズを変更したことを知らせるイベントがありますか? (私は実際WPFの人ではありませんが、WinFormsはColumnSizeChangedとColumnSizeChangingイベントを提供しています)。少し面倒ですが、基本的に独自のカスタムリストビューコントロールをロールしない限り、はるかにうまくいくかどうかわかりません。

+0

正確には、それは私が探しているものです。入力してくれてありがとうございました。私は「簡単な」/クリーンな方法(コードビハインドなし/別々のイベントの使用など)がないと思います。 –

1

データソースがStaticResourceの場合は、複合コレクションを使用できます。私は本当にこれが他の場所で働くことを望む。悲しい、本当に。とにかくそれを使うことができれば本当にいいですね。

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

お楽しみください!

0

その合計の間でバインドされ、あなたはGridViewColumnsプロパティに直接GridViewRowPresenterColumnsプロパティをバインドすることができます。それらがメイングリッドに変更された場合

<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> 
関連する問題