2010-10-15 164 views
0

我遇到了一些問題,找出哪個列表視圖列標題被點擊。在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是顯示名稱的列標題,這是不同的不同的語言。有沒有辦法獲得一些其他類型的標識符,而不是依賴於「標題」字符串而不依賴於顯示/語言?

謝謝!

回答

0

您可以使用DisplayMemberBinding:


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

或者,你可以聲明附加屬性每一個他用名字來使用和使用它。

konstantin

0

爲什麼不使用IComparer和custom sorter並且一起忽略頭文件?這將刪除您與用戶界面的聯繫以及您顯示的內容,並允許您專注於業務對象(模型),這是重點應放在哪裏。如此嚴重地使用用戶界面永遠不可擴展,並且會在某個時間點產生維護頭痛,如果還沒有的話。

0

最簡單的將是在頭部使用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; 
    }