WPF ListView のソートとページングを実装する方法
WPFでListViewをソートおよびページ表示するには、次の手順に従います。
- ListView コントロールを XAML ファイルに追加する:
<ListView x:Name="listView"
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="120"/>
<GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="80"/>
<GridViewColumn Header="Gender" DisplayMemberBinding="{Binding Gender}" Width="80"/>
<!-- 其他列 -->
</GridView>
</ListView.View>
</ListView>
- ViewModelで、ListViewのItemsSourceにバインドするItemsプロパティと、ListViewのSelectedItemにバインドするSelectedItemプロパティを作成する。
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection<Item> _items;
private Item _selectedItem;
public ObservableCollection<Item> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged("Items");
}
}
public Item SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
// 其他属性和方法
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
- ViewModelにソート・ページング処理を追加する
private void Sort(string propertyName, ListSortDirection sortDirection)
{
ICollectionView view = CollectionViewSource.GetDefaultView(Items);
view.SortDescriptions.Clear();
view.SortDescriptions.Add(new SortDescription(propertyName, sortDirection));
view.Refresh();
}
private void Page(int pageIndex, int pageSize)
{
ICollectionView view = CollectionViewSource.GetDefaultView(Items);
view.PageSize = pageSize;
view.MoveToPage(pageIndex);
view.Refresh();
}
- ViewModelのコンストラクタで項目プロパティを初期化して、並べ替えとページングを必要に応じて実行する。
public ViewModel()
{
// 初始化Items属性
Sort("Name", ListSortDirection.Ascending); // 按照Name列升序排序
Page(0, 10); // 默认显示第一页,每页显示10条记录
}
これらの手順に従うことで、WPFでListViewの並び替えとページング機能を実装できます。実際の要件に応じて、ViewModelで並び替えとページングの方法を提供し、XAMLで関連するコマンドをバインドしてこれらの方法をトリガーできます。