GridViewColumnHeader.Click(WPF)

时间:2017-05-24 00:02:36

标签: wpf listview gridview onclick columnheader

我有一个ListView用于个人信息:

<ListView GridViewColumnHeader.Click="GridViewColumnHeader_Click" x:Name="personListView">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="{x:Static resource:PersonGridViewColumns.Name}"/>
            <GridViewColumn DisplayMemberBinding="{Binding Age}" Header="{x:Static resource:PersonGridViewColumns.Age}"/>
            <GridViewColumn DisplayMemberBinding="{Binding Nationality}" Header="{x:Static resource:PersonGridViewColumns.Nationality}"/>
        </GridView>
    </ListView.View>
</ListView>

列标题绑定到资源,以便可以对它们进行本地化。当用户单击列标题时,GridViewColumnHeader.Click会触发。在该方法中,我可以看到标题的内容(名称),并了解单击了哪一个:

private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
    string column = ((GridViewColumnHeader)e.OriginalSource).Column.Header.ToString()

    switch (column)
    {
        case "Name":
            DoSomethingNameRelated();

            break;
        case "Age":
            DoSomethingAgeRelated();

            break;
        case "Nationality":
            DoSomethingNationalityRelated();

            break;
    }
}

这里的问题是,只有当用户拥有英文用户界面时,它才有效。我尝试切换资源本身(例如PersonGridViewColumns.Name),但不会编译,因为它不是常量。

我需要知道单击了哪个列标题才能执行相应的操作。我有什么选择?

1 个答案:

答案 0 :(得分:0)

GridViewColumnHeader Header属性的类型为object,因此您可以创建一个表示列标题的类。重写其ToString()方法以返回本地化的标题文本,并添加您的点击事件处理程序可以使用的某种“ColumnId”属性。

然后,您可以为每个列创建此类的实例,并将它们作为单独的属性(如果您只有几列)公开,或者作为集合公开,并绑定到它们各自列的Header属性中。 XAML。