我有一个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),但不会编译,因为它不是常量。
我需要知道单击了哪个列标题才能执行相应的操作。我有什么选择?
答案 0 :(得分:0)
GridViewColumnHeader Header属性的类型为object,因此您可以创建一个表示列标题的类。重写其ToString()方法以返回本地化的标题文本,并添加您的点击事件处理程序可以使用的某种“ColumnId”属性。
然后,您可以为每个列创建此类的实例,并将它们作为单独的属性(如果您只有几列)公开,或者作为集合公开,并绑定到它们各自列的Header
属性中。 XAML。