ListViewExtensions 1.2.0
See the version list below for details.
dotnet add package ListViewExtensions --version 1.2.0
NuGet\Install-Package ListViewExtensions -Version 1.2.0
<PackageReference Include="ListViewExtensions" Version="1.2.0" />
paket add ListViewExtensions --version 1.2.0
#r "nuget: ListViewExtensions, 1.2.0"
// Install ListViewExtensions as a Cake Addin #addin nuget:?package=ListViewExtensions&version=1.2.0 // Install ListViewExtensions as a Cake Tool #tool nuget:?package=ListViewExtensions&version=1.2.0
ListView Extensions
WPFのListViewは効果的にコレクションの内容を表示することができますが、ヘッダーをクリックしてソートしたり、右クリックやダブルクリック、選択したアイテムの取得などの機能を実装するととたんに難しくなります。
ListView Extensionsは、そのようなListViewのポテンシャルを簡単に引き出すために、View / ViewModel / Modelの各面からサポートをするライブラリです。
主な機能
- ソート
- 項目の複数選択のバインディング
- 項目のダブルクリックのViewModel通知
- スレッドセーフなコレクション操作
動作環境
- .NET Core 3.1以上 / .NET Framework 4.5.2以上
使用方法
1. Nugetからインストール
https://www.nuget.org/packages/ListViewExtensions
2. XAML名前空間を設定
XAMLで名前空間 "http://schemas.eh500-kintarou.com/ListViewExtensions" を設定します。
<Window x:Class="ListViewExtensionsTest.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:lv="http://schemas.eh500-kintarou.com/ListViewExtensions"
Title="MainWindow" Height="480" Width="640">
3. Viewを作成
View内でListViewを作成します。その際、GridViewColumnで列を設定する代わりに、SortableGridViewColumnを使用することで、その列でソートすることができるようになります。
<ListView ItemsSource="{Binding People}" >
<ListView.View>
<GridView>
<lv:SortableGridViewColumn Width="120" SortableSource="{Binding People}" DisplayMemberBinding="{Binding Name}" Header="Name" />
<lv:SortableGridViewColumn Width="150" SortableSource="{Binding People}" DisplayMemberBinding="{Binding Pronunciation}" Header="Pronunciation" />
<lv:SortableGridViewColumn Width="70" SortableSource="{Binding People}" DisplayMemberBinding="{Binding Age}" Header="Age" />
<lv:SortableGridViewColumn Width="120" SortableSource="{Binding People}" DisplayMemberBinding="{Binding Birthday}" Header="Birthday" />
<lv:SortableGridViewColumn Width="120" SortableSource="{Binding People}" DisplayMemberBinding="{Binding Height}" Header="Height" />
</GridView>
</ListView.View>
</ListView>
4. Modelを作成
Model内でSortableObservableCollectionクラスをインスタンス化します。これはListViewで表示される内容に対応するコレクションで、スレッドセーフに作ってあります。
public SortableObservableCollection<PersonModel> People { get; } = new SortableObservableCollection<PersonModel>();
5. ViewModelを作成
ViewModel内でListViewViewModelクラスをインスタンス化します。ModelのSortableObservableCollectionの変更通知をUIスレッドに転送してくれるほか、並び変え、選択などのコマンドも持っていて、ListViewの多くの機能を受け止めることができます。
People = new ListViewViewModel<PersonViewModel, PersonModel>(model.People, person => new PersonViewModel(person), DispatcherHelper.UIDispatcher);
6. サンプルコードをチェック
このリポジトリにはサンプルコードが含まれています。 サンプルコード を見ることでより理解が深まります。
プロジェクトURL
https://github.com/EH500-Kintarou/ListViewExtensions
https://www.nuget.org/packages/ListViewExtensions
https://days-of-programming.blogspot.com/search/label/ListView%20Extensions
バージョン履歴
ver.1.2.0 (2024/09/03)
- IReadOnlySortableObservableCollectionインターフェースとReadOnlySortableObservableCollectionクラスを追加
- ISortableObservableCollectionインターフェースはIReadOnlySortableObservableCollectionインターフェースを継承するようにした
- ListViewViewModelのコンストラクタに与えるソースコレクションをIReadOnlySortableObservableCollectionにした
- ListViewViewModelに単一の型引数を取るオーバーロードを追加
ver.1.1.0 (2024/08/31)
- ターゲットを.NET Framework 4.5.2 / .NET Core 3.1 / .NET 6に変更
- ListViewのヘッダーサポートを強化
- SortableGridViewColumnHeader、SortableGridViewColumnを追加
- SortedHeaderをObsolete指定にした
- ISortableObservableCollectionのSortメソッドの引数を変更、古いメソッドはObsolete指定にした
- コードのリファクタリング、Nullableの有効化、単体テストの追加など
ver.1.0.1 (2018/03/24)
- Obsoleteに指定していた非同期アクセス非サポートのクラスを削除
- SyncedObservableCollectionが実装する非ジェネリックインターフェイス(IList, ICollectionなど)を明示的なインターフェイスの実装に変更
ver.1.0.0 (2017/11/26)
- 正式リリース
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net6.0-windows7.0 is compatible. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
.NET Framework | net452 is compatible. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
-
.NETCoreApp 3.1
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
-
.NETFramework 4.5.2
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
-
net6.0-windows7.0
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.3.1 | 95 | 9/29/2024 |
1.3.0 | 101 | 9/22/2024 |
1.2.0 | 103 | 9/3/2024 |
1.1.0 | 110 | 8/31/2024 |
1.0.1 | 1,191 | 3/24/2018 |
1.0.0 | 934 | 11/26/2017 |
1.0.0-beta4 | 706 | 11/13/2017 |
1.0.0-beta3 | 723 | 10/25/2017 |
1.0.0-beta2 | 717 | 10/24/2017 |
1.0.0-beta1 | 1,066 | 12/17/2015 |
- IReadOnlySortableObservableCollectionインターフェースとReadOnlySortableObservableCollectionクラスを追加
- ISortableObservableCollectionインターフェースはIReadOnlySortableObservableCollectionインターフェースを継承するようにした
- ListViewViewModelのコンストラクタに与えるソースコレクションをIReadOnlySortableObservableCollectionにした
- ListViewViewModelに単一の型引数を取るオーバーロードを追加