나는이 ListView
정렬 절차가 있습니다WPF의 DataGridColumn DisplayMemeberBinding
/// <summary>
/// Handle the event of clicking on a column header to sort
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GridViewColumnHeaderClicked(object sender, RoutedEventArgs e)
{
GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
if (headerClicked == null)
return;
if (headerClicked.Role == GridViewColumnHeaderRole.Padding)
return;
>>> var sortingColumn = (headerClicked.Column.DisplayMemberBinding as Binding)?.Path?.Path;
if (sortingColumn == null)
return;
var direction = ApplySort(Items, sortingColumn);
if (direction == ListSortDirection.Ascending)
{
headerClicked.Column.HeaderTemplate =
Resources["HeaderTemplateArrowUp"] as DataTemplate;
}
else
{
headerClicked.Column.HeaderTemplate =
Resources["HeaderTemplateArrowDown"] as DataTemplate;
}
// Remove arrow from previously sorted header
if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked)
{
_lastHeaderClicked.Column.HeaderTemplate =
Resources["HeaderTemplateDefault"] as DataTemplate;
}
_lastHeaderClicked = headerClicked;
}
을 그리고 ListView.View
를 사용하여 정의 할 때 DisplayMemberBinding
과 같이 그것은 잘 작동 : 지금 일부 열을의 요구 사항이
<!-- Name -->
<GridViewColumn Width="200"
DisplayMemberBinding="{Binding FullName}">
<GridViewColumn.Header>
<GridViewColumnHeader Content=" Name"
HorizontalContentAlignment="Left" />
</GridViewColumn.Header>
</GridViewColumn>
오른쪽 정렬 그래서이 같은 것을 사용해야합니다 :
<!-- Name -->
<GridViewColumn Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullName}"
TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
<GridViewColumn.Header>
<GridViewColumnHeader Content=" Name"
HorizontalContentAlignment="Left" />
</GridViewColumn.Header>
</GridViewColumn>
그러나 이제 정렬 절차 (>>>로 표시된 줄)를 참조 할 때 더 이상 DisplayMemberBinding
을 참조 할 필요가 없습니다. CellTemplate
->TextBlock
에서 바인딩을 찾는 방법이 있습니까? 스누핑을 사용하여 C# 코드와 XAML 코드를 모두 파고 있지만 바인딩을 찾을 수 없습니다.
첫 번째 아이디어가 효과가 없었기 때문에 첨부 된 속성 아이디어를 더욱 멋지게 만들었습니다. –