求助wpf中点击ListView列头进行筛选

jiang_yuhan 2016-11-20 09:59:30
求助wpf中点击ListView列头进行筛选,效果如excel的筛选,小弟刚学wpf,菜鸟一个,有想法但不知道怎么做,还请各位大神赐教啊。
...全文
1532 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
muzizongheng 2016-11-23
  • 打赏
  • 举报
回复
exception92 2016-11-22
  • 打赏
  • 举报
回复
引用 3 楼 jiang_yuhan 的回复:
谢谢二位,我要的是筛选不是排序,如点击房间类型弹出个下拉列表:标准间、单人间、三人间...等,选择标准间,整个ListView就只显示房间类型为标准间的房间。
在下拉框的SelectionChanged事件中对数据源进行过滤就可以了。 参考#4
jiang_yuhan 2016-11-22
  • 打赏
  • 举报
回复
一头雾水啊,还请版主明示,最好能给我样例,小弟不胜感激
jiang_yuhan 2016-11-21
  • 打赏
  • 举报
回复
谢谢二位,我要的是筛选不是排序,如点击房间类型弹出个下拉列表:标准间、单人间、三人间...等,选择标准间,整个ListView就只显示房间类型为标准间的房间。
jiang_yuhan 2016-11-21
  • 打赏
  • 举报
回复
样式文件:

<Style x:Key="PepoleListViewItemStyle" TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <Border IsEnabled="True" Name="Border" Padding="0">
                        <GridViewRowPresenter></GridViewRowPresenter>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True" >
                            <Setter TargetName="Border" Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <GradientStop Color="#d6edfb" Offset="0.0"/>
                                        <GradientStop Color="#d6edfb" Offset="0.35"/>
                                        <GradientStop Color="#aadcf9" Offset="0.65"/>
                                        <GradientStop Color="#aadcf9" Offset="1.0"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                            <Setter TargetName="Border" Property="BorderBrush" Value="#63dafc"/>
                            <Setter TargetName="Border" Property="CornerRadius" Value="1"/>
                        </Trigger>

                        <Trigger Property="IsSelected" Value="true">
                            <!--<Setter TargetName="Border" Property="Background"  Value="Transparent"/>-->
                            <!--<Setter TargetName="Border" Property="Background"  Value="#63dafc"/>-->

                            <Setter TargetName="Border" Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1"   StartPoint="0,0" >
                                        <GradientStop Color="#d6edfb" Offset="0.0"/>
                                        <GradientStop Color="#d6edfb" Offset="0.35"/>
                                        <GradientStop Color="#aadcf9" Offset="0.65"/>
                                        <GradientStop Color="#aadcf9" Offset="1.0"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                            <Setter TargetName="Border" Property="BorderBrush" Value="#0bbcef"/>
                            <Setter TargetName="Border" Property="CornerRadius" Value="1"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
<Style x:Key="PepoleHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0,1"   StartPoint="0,0" >
                    <GradientStop Color="#FFF" Offset="0.0"/>
                    <GradientStop Color="#EEE" Offset="1.0"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="#FF07034B"/>
        <Setter Property="Height" Value="36"/>
        <Setter Property="BorderThickness" Value="0,1,0,3"/>
        <Setter Property="BorderBrush">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFA1CCE0" Offset="0"/>
                    <GradientStop Color="#FFABD5EA" Offset="1.0"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">

                    <Border 
                        x:Name="border" 
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        BorderBrush="{TemplateBinding BorderBrush}" 
                        Background="{TemplateBinding Background}">
                        <Grid>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                            <TextBlock 
                                x:Name="txt" 
                                Height="Auto"
                                Foreground="#0816BB" 
                                VerticalAlignment="Center"  
                                Text="{TemplateBinding Content}"/>
                        </StackPanel>
                            <StackPanel Width="1" Background="#FFCCCEDB" HorizontalAlignment="Right" />
                        </Grid>
                    </Border>

                    
        <!--触发器  设置鼠标进入时的背景、前景样式-->
                    <!--<ControlTemplate.Triggers>
                        --><!--设置鼠标进入时的背景、前景样式--><!--
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Orange" TargetName="border" />
                            <Setter Property="Foreground" Value="White" TargetName="txt"/>
                        </Trigger>
                    </ControlTemplate.Triggers>-->
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>

<Style x:Key="RoomManageStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0,1"   StartPoint="0,0" >
                    <GradientStop Color="#FFF" Offset="0.0"/>
                    <GradientStop Color="#EEE" Offset="1.0"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <!--<Setter Property="Tag" Value="{StaticResource FIcon}"/>-->
        <!--<Setter Property="Foreground" Value="#FF07034B"/> HeaderStringFormat-->
        <!--Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=HeaderStringFormat}"-->
        <!--<Setter Property="Height" Value="36"/> GridViewColumn-->
        <!--<Setter Property="FontFamily" Value="宋体"/>
        <Setter Property="FontSize" Value="16"/>-->
        <Setter Property="BorderBrush">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFA1CCE0" Offset="0"/>
                    <GradientStop Color="#FFABD5EA" Offset="1.0"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                   
                    <Border 
                        x:Name="border" 
                        BorderThickness="0,1,0,3" 
                        BorderBrush="{TemplateBinding BorderBrush}" 
                        Background="{TemplateBinding Background}">
                        <Grid>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                            <!--<TextBlock 
                                x:Name="icon"
                                FontSize="26"
                                Text="" 
                                Padding="0,2.5,0,0" 
                                VerticalAlignment="Center" HeaderStringFormat
                                Foreground="{TemplateBinding Foreground}" 
                                FontFamily="/武当功夫馆管理系统;component/Resources/#SF2016"/>-->
                            
                            <TextBlock 
                                x:Name="txt" 
                                Height="Auto"
                                Foreground="#0816BB" 
                                VerticalAlignment="Center"  
                                Text="{TemplateBinding Content}"/>
                        </StackPanel>
                        <StackPanel Width="1" Background="#FFCCCEDB" HorizontalAlignment="Right" />
                        <!--<local:FButton 
                    x:Name="bnt_筛选" 
                    FIcon="" 
                    FIconSize="12"
                    Background="{x:Null}" Foreground="#FF042271" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="Auto" Height="Auto" BorderBrush="#FFCCCEDB" BorderThickness="1" Cursor="Hand" />-->
                        </Grid>
                    </Border>

                    <!--触发器  Foreground-->
                    <ControlTemplate.Triggers>
                        <!--设置鼠标进入时的背景、前景样式-->
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Orange" TargetName="border" />
                            <!--<Setter Property="Foreground" Value="White" TargetName="icon"/>-->
                            <Setter Property="Foreground" Value="White" TargetName="txt"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
jiang_yuhan 2016-11-21
  • 打赏
  • 举报
回复
UI文件:
<Window x:Class="Hotel.ListView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ListView" Height="300" >

    <Window.Resources>
        <DataTemplate x:Key="DisplayImage">
            <StackPanel HorizontalAlignment="Center" >
                <Image Source="/武当功夫馆管理系统;component/Images/room.png" Width="32" Height="32" HorizontalAlignment="Center"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <!--ContextMenuStrip-->

        <ListView  Name="listViewRooms" GridViewColumnHeader.Click="Button_Click"
                   ItemContainerStyle="{StaticResource PepoleListViewItemStyle}" 
                   BorderBrush="{x:Null}" BorderThickness="0" FontFamily="宋体" >
            <ListView.View>
                <GridView ColumnHeaderContainerStyle="{DynamicResource PepoleHeaderStyle}">
                    <GridView.Columns>
                        <GridViewColumn Width="45" Header="" CellTemplate="{StaticResource DisplayImage}" />
                        <GridViewColumn Width="150" Header="序号" x:Name="mycolumn0">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox TextAlignment="Center" 
                                             Text="{Binding Path=RoomId, Mode=TwoWay}"  
                                             MinWidth="{Binding Path=ActualWidth,ElementName=mycolumn0}" 
                                             HorizontalAlignment="Center" 
                                             VerticalAlignment="Center"
                                             HorizontalContentAlignment="Center"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Width="150" Header="房间编号" x:Name="mycolumn1">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox TextAlignment="Center" 
                                             Text="{Binding Path=RoomId, Mode=TwoWay}"  
                                             MinWidth="{Binding Path=ActualWidth,ElementName=mycolumn1}" 
                                             HorizontalAlignment="Center" 
                                             VerticalAlignment="Center"
                                             HorizontalContentAlignment="Center"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Width="150" Header="房间类型" x:Name="mycolumn2"
                                        HeaderContainerStyle="{DynamicResource RoomManageStyle}">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox Height="24" x:Name="cmbTypeName"  
                                              Style="{StaticResource ComboBoxStyle}"
                                              MinWidth="{Binding Path=ActualWidth,ElementName=mycolumn2}" 
                                              ItemsSource="{Binding Path=RoomTypeList, ElementName=roomm}"
                                              SelectedIndex="{Binding RoomTypeId, Mode=TwoWay}">
                                    </ComboBox>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                        <GridViewColumn Width="150" Header="添加房间" x:Name="mycolumn4"
                                        HeaderContainerStyle="{DynamicResource RoomManageStyle}" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate/>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Width="150" Header="删除房间" x:Name="mycolumn5" 
                                        HeaderContainerStyle="{DynamicResource RoomManageStyle}" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate/>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
            <ListView.ContextMenu>
                <ContextMenu Name="cm" StaysOpen="True" FontSize="14" Width="108">
                    <MenuItem Header="添加房间" Name="添加房间" Icon=""
                       Style="{StaticResource DefaultMenuItem}"   />
                    <MenuItem Header="删除房间" Name="删除房间" Icon=""
                       Style="{StaticResource DefaultMenuItem}"  />
                    <MenuItem Header="保存" Name="保存" Icon=""
                       Style="{StaticResource DefaultMenuItem}"  />
                </ContextMenu>
            </ListView.ContextMenu>
        </ListView>
    </Grid>
</Window>


exception92 2016-11-21
  • 打赏
  • 举报
回复
修改ListView的View为GridView,例如:

<ListView x:Name="myListView" HorizontalAlignment="Stretch" Width="210" Margin="10" Height="200" GridViewColumnHeader.Click="myListView_Click">
                <ListView.View>
                    <GridView>
                        <GridView.ColumnHeaderContainerStyle>
                            <Style TargetType="GridViewColumnHeader">
                                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                <Setter Property="VerticalContentAlignment" Value="Center"/>
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="HorizontalAlignment" Value="Center"/>
                                <Setter Property="Height" Value="31"></Setter>
                                <Setter Property="Width" Value="80"></Setter>
                                <Setter Property="Background" Value="#1c2f2d"></Setter>
                                <Setter Property="Foreground" Value="#f2fbfa"></Setter>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="GridViewColumnHeader">
                                            <Border Background="{TemplateBinding Background}">
                                                <ContentPresenter VerticalAlignment="{TemplateBinding VerticalAlignment}"
                                       HorizontalAlignment="{TemplateBinding HorizontalAlignment}"></ContentPresenter>
                                            </Border>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </GridView.ColumnHeaderContainerStyle>
                        <GridView.Columns>
                            <GridViewColumn Header="列1" Width="70" DisplayMemberBinding="{Binding 属性1}">
                            </GridViewColumn>
                            <GridViewColumn Header="列2" Width="70"  DisplayMemberBinding="{Binding 属性2}">
                            </GridViewColumn>
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>

GridViewColumnHeader.Click="myListView_Click" 中的事件 为后台排序事件,对数据源进行排序。
  • 打赏
  • 举报
回复
http://www.cnblogs.com/hongfei/p/3579373.html这篇文章可以帮到你
muzizongheng 2016-11-21
  • 打赏
  • 举报
回复
可以实现.步骤如下: 1. 自定义DataGrid的DataGridColumnHeader的Style, 在style的Template中添加TextBox或者ComboBox用于过滤项的输入 2. 使用时在DataGrid的DataGridColumn的HeaderStyle指定上面的资源 3. 上面2步只是从UI上进行了显示. 4.在第1的控件(txt或者cmb)中添加event 监测输入, 比如txt的TextChanged或者cmb的SelectionChanged 5.把DataGrid的ItemSource 绑定到CollectionView, 处理CollectionView的Filter 事件

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧