【问题标题】:problem sorting ListView by column按列排序 ListView 的问题
【发布时间】:2010-10-16 11:04:35
【问题描述】:

我在确定单击了哪个列表视图列标题时遇到了一些问题。在 XAML 中,我有这个:

ListView Name="myListView" ItemsSource="{Binding MyItemList}" GridViewColumnHeader.Click="ListView_Click"

一旦点击列标题,我会这样处理:


private void ListView_Click(object sender, RoutedEventArgs e)
        {
            GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
            string header = headerClicked.Column.Header as string;
[...]

这就是我在许多示例中看​​到的按列排序的方式。在此之后,我使用标题来确定要排序的列,然后进行排序。

我的问题是 headerClicked.Column.Header 是列标题的显示名称,对于不同的语言是不同的。有没有办法获得一些其他类型的标识符,它不依赖于显示/语言而不是依赖于“标题”字符串?

谢谢!

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    您可以使用 DisplayMemberBinding:

    
    Binding b = headerClicked.Column.DisplayMemberBinding as Binding;
    string header = b != null ? b.Path.Path as string : null;
    

    或者,您可以为每个标题声明一个附加属性,并使用该名称并使用它。

    康斯坦丁

    【讨论】:

      【解决方案2】:

      为什么不使用 IComparer 和 custom sorter 并忽略所有标题?这将消除您与 UI 以及您正在显示的内容的联系,并允许您专注于业务对象(模型),这应该是重点。如此频繁地使用 UI 永远无法扩展,并且会在某个时间点造成维护上的麻烦,如果还没有的话。

      【讨论】:

        【解决方案3】:

        最简单的方法是在标题上使用 Name 属性(或 Tag 属性),像这样更改您的 xaml:

        <ListView Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" Name="listView1" VerticalAlignment="Top" Width="234">
            <ListView.View>
        
                <GridView>
                    <GridViewColumn Width="100">
                        <GridViewColumnHeader Name="Sort1" Content="Header1" Click="Header_Click"/>
                    </GridViewColumn>
                    <GridViewColumn Width="100">
                        <GridViewColumnHeader Name="Sort2" Content="Header2" Click="Header_Click"/>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
        

        然后你可以像这样改变你的处理程序:

            private void Header_Click(object sender, RoutedEventArgs e) {
                GridViewColumnHeader header = sender as GridViewColumnHeader;
                String sort = header.Name;
                // Sort code here...
                return;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-12
          • 1970-01-01
          • 2015-07-12
          • 1970-01-01
          • 1970-01-01
          • 2022-11-13
          相关资源
          最近更新 更多