|
分類:[.NET 全般]
C# WPF ListViewのカラムヘッダクリックによるソートを実装しようとしているのですが、出来ません。
XAML)
<ListView Grid.Column="1" Name="listView_Checked" ItemsSource="{Binding Pictures, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<ListView.View>
<GridView>
<GridViewColumn Width="128">
<GridViewColumnHeader Margin="0,0,2,0" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Path}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="400" >
<GridViewColumnHeader Margin="0,0,2,0" Tag="path" Click="CheckedGridViewColumnHeader_Click" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path}" Foreground="DarkBlue" TextWrapping="Wrap" Style="{StaticResource GlowingTextBlockStyle}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="212" >
<GridViewColumnHeader Margin="0,0,2,0" Tag="lastUpdate" Click="CheckedGridViewColumnHeader_Click" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Width="190">
<TextBlock Text="{Binding LastUpdateText}" Foreground="DarkBlue" HorizontalAlignment="Center" Style="{StaticResource GlowingTextBlockStyle}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="140" >
<GridViewColumnHeader Margin="0,0,2,0" Tag="size" Click="CheckedGridViewColumnHeader_Click" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Width="128">
<TextBlock Text="{Binding SizeText}" Foreground="DarkBlue" HorizontalAlignment="Right" Style="{StaticResource GlowingTextBlockStyle}" />
</StackPanel>
</DataTemplate>
<GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
C#)
private void CheckedGridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
GridViewColumnHeader columnHeader = sender as GridViewColumnHeader;
this.SortListView(this.listView_Checked, columnHeader.Tag as String);
}
private void SelectedGridViewColumnHeader_Click(object sender, RoutedEventArgs e)
{
GridViewColumnHeader columnHeader = sender as GridViewColumnHeader;
this.SortListView(this.listView_Selected, columnHeader.Tag as String);
}
private void SortListView(ListView listView, String tag)
{
if(listView.Items.Count < 2)
{
return;
}
ListSortDirection direction;
SortDescription sortDescription;
if (listView.Items.SortDescriptions.Count == 0)
{
direction = ListSortDirection.Descending;
sortDescription = new SortDescription(tag, direction);
listView.Items.SortDescriptions.Add(sortDescription);
return;
}
if(listView.Items.SortDescriptions.Last().Direction == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
listView.Items.SortDescriptions.Clear();
sortDescription = new SortDescription(tag, direction);
listView.Items.SortDescriptions.Add(sortDescription);
}
上記コードでカラムヘッダをクリックすると、1回目のクリックではソートされるのですが、2回目以降のソートでは、何もソートされません。
何がいけないのか、ご教示お願い致します。
|