2017-05-24 8 views
0

Iは、個人情報のためのリストビューを有する:それらは局在化することができるように列ヘッダ識別子(WPF)

<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が発生します。ここでの問題は、それが唯一の限り、ユーザーはそれが英語でUIのしているように動作することである

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

GridViewColumnHeaderヘッダープロパティはオブジェクト型です。したがって、列見出しを表すクラスを作成できます。ローカライズされたヘッダーテキストを返すToString()メソッドをオーバーライドし、Clickイベントハンドラが利用できる「ColumnId」プロパティを追加します。

次に、このクラスのインスタンスを列ごとに作成し、それらを個別のプロパティ(列がわずかである場合)またはコレクションとして公開し、XAMLの各列のHeaderプロパティにバインドできます。

+0

かなり混乱します。 – user8056359