Xamarin.forms: [提案] CollectionViewSourceを実装する

作成日 2018年03月27日  ·  20コメント  ·  ソース: xamarin/Xamarin.Forms

説明

Silverlight、WPF、UWPなどの主要なXAMLベースのMicrosoftテクノロジには、CollectionViewSourceというクラスがあります。 XamarinFormsはそうではありません。 INotifyCollectionChangedインターフェイスは、モデルとユーザーインターフェイスの間の非常に重要なインターフェイスです。 このインターフェイスを使用すると、アイテムのリストの要素を完全にクリアしたり、アイテムを追加または削除するたびにそれらの要素を最初から再構築したりすることなく、UIを更新できます。 これにより、パフォーマンスと応答性が向上します。

CollectionViewSourceは、テクノロジー全体でINotifyCollectionChangedの共通の実装を提供すること、およびINotifyCollectionChangedインターフェイスを介してコントロール全体で共通のフィルタリングおよび並べ替え機能を提供することを目的としています。 CollectionViewSourceが使用できない場合、コントロールはそれ自体でフィルタリングと並べ替えを実装する必要がありますが、これは多かれ少なかれハックです。 たとえば、ListViewにはこのプロパティがあります(https://developer.xamarin.com/api/property/System.Windows.Forms.ListView.Sorting/)。

CollectionViewSourceは、フィルタリング、グループ化、および並べ替えのための抽象化レイヤーを提供するため、実装するコントロールは、CollectionViewSourceクラスにすでに存在する機能を再実装する必要がありません。 また、モデルに影響を与えないレベルでフィルタリングと並べ替えを適用できることも意味します。 たとえば、特定のリストの並べ替えによって基になるモデルが変更された場合に何らかの副作用が発生する可能性がある場合でも、CollectionViewSourceは基になるモデルを変更しないため、CollectionViewSourceを使用して並べ替えを行うことができます。

ListViewやPickerなどのXFツールキットのコントロールの多くは、おそらく何らかの方法で機能を実装する必要があります。 他のプラットフォームでのクラスの最も一般的な使用法はDataGridsでしたが、これは標準のXFツールキットには存在しません。 ただし、SyncFusion DataGridなどのサードパーティのコントロールは、Xamarin Formsに標準のMicrosoft標準が存在する場合、それらの標準に合わせることができます。

MSDNの記事
https://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v = vs.110).aspx

WPFサンプル
https://github.com/Microsoft/WPF-Samples/tree/master/Data%20Binding/CollectionViewSource

記事:
https://www.hanselman.com/blog/CollectionViewSourceIsCrazyUsefulForBindingToFilteredObservableCollectionsOnWindowsPhone8.aspx

collectionview high impact proposal-open enhancement ➕

最も参考になるコメント

これは絶対に必要です。

全てのコメント20件

ListViews、Pickers、およびその他のいくつかのコントロールは、すでにINCCイベントをリッスンしています

@StephaneDelcroix 、それは十分に公平です-彼らがそうするべきです。 ただし、必要なものは、標準のINotifyCollectionChanged機能が提供するものをはるかに上回っています。 基本的なポイントとして、INCCはリストのインラインソートなしではあまり役に立ちません。 ObservableCollection <>にバインドする場合、コンテンツをどのように並べ替える必要がありますか? 手動でバブルソートを行うことはできますが、Enumerable.OrderBy(TSource、TKey)を呼び出しても、新しいIEnumerableが作成され、とにかく完全に更新されるため、役に立ちません。

CollectionViewSourceは、私が今述べた問題の解決策を提供するために、常にXAMLテクノロジの大きな部分を占めてきました。 これがないと、ObservableCollection <>のようなリストを並べ替えて、並べ替えを開始するコードを作成する必要があります。 しかし、それでも、副作用の問題が発生します。CollectionViewSourceがないと、XFには、他のXAMLテクノロジに標準で付属している機能の膨大なチャンクがありません。

これはフィルタリングやグループ化にも触れていません...これがないと、SyncFusionなどのサードパーティのコントロールを含むすべてのXFコントロールが独自の接線でオフになり、これまでの標準システムと互換性がなくなります。 WPF以降のXAMLエコシステムの一部。

余談ですが、上司は常に、設定可能な並べ替え、フィルタリング、グループ化などを提供するように私に圧力をかけています。 そのため、独自のコードを使用して、アプリで部分的なソリューションを提供しました。 ただし、SilverlightやWPFで利用可能だったもののようなものは提供しません。 機能を取得するために、Microsoftのパラダイムから完全に逸脱した場所でSyncFusionコントロールを使用することを余儀なくされています。 これらのコントロールが原因でクラッシュなどが何度も発生したため、信頼できません。

CollectionViewSourceは、XAMLテクノロジスペースの基本的な要件です。

INCC!= CollectionViewSource

自分でCollectionViewSourceを書くのを妨げるものはありますか?

欠落しているのは、ResourceDictionaries内のバインド可能なオブジェクトが継承されたバインディングコンテキストを取得する機能だけです。 これは修正される可能性がありますが、ソースとバインドすることで回避するのは非常に簡単です

それらのどれも標準システムと互換性がありません

どのような互換性を参照していますか? XAMLがCollectionViewSourcesに対して採用した一般的な構文だけですか?

どのサイズのコレクションに対して操作していますか?

ObservableCollection <>にバインドする場合、コンテンツをどのように並べ替える必要がありますか?

私が見たほとんどの実装は、ReadOnlyプロキシリストを使用しています。ReactiveList、DynamicData、そしてCollectionViewSourceはそれが公開するICollectionViewでもこれを行うと確信しています。 ソースリストに対しては機能せず、ソースリストを読み取り専用ビューに投影します。 小さな更新は同期されるだけですが、大きな更新はリセットと更新を引き起こすだけです。

あなたがリアクティブファンでないなら、これは初心者ではないことを私は理解していますが
https://github.com/RolandPheasant/DynamicData
驚くべきことであり、より大きなデータセットの処理で問題が発生したことはありません

私はこれが提案オープンであるとマークしました。私はこれについて少し興味があります。

@StephaneDelcroix

独自のCollectionViewSourceを作成することを妨げるものはありますか?

クラスの両側で考慮すべき実装があります。 つまり、クラス自体が並べ替え、フィルタリング、およびグループ化を行う必要があります。そうです、自分で作成することもできます。 しかし、それは方程式の一部にすぎません。 コントロールは、並べ替えやフィルタリングなどを指示するロジックを実装する必要があります。 たとえば、WPFおよびSilverlightでは、特定の列のヘッダーをクリックすると、DataGridsがCollectionViewSourceと対話します。 これにより、列ごとにリゾートが発生します。 Xamarin Formsには現在、公式のDataGridがありません。 ただし、DataGridがないことの副作用は、SyncFusionなどのサードパーティが独自のDataGridを作成したことを意味します。 DataGrid自体には何の問題もありませんが、標準のMicrosoftCollectionViewSourceを使用して制御を切り離していません。 それらのソートロジックはすべてコントロールに組み込まれており、他のコントロールと共有されることはありません。 したがって、それらの並べ替え機能が必要な場合は、それらのコントロールを使用するか、まったく使用しないでください。 独自のフルバージョンのCollectionViewSourceを作成した場合でも、列ヘッダーのクリックイベントをキャプチャし、CollectionViewSourceに並べ替え列を設定するには、DataGridのようなものを作成する必要があります。

Xamarin Formsは、これを使用するためにDataGridを作成する必要はありません。 ListViewsやPickersなどに役立ちます。ただし、他のコントロールや機能を実装する必要があります。 たとえば、このアプリでは、基本レベル(中間クラス)でCollectionViewSourceに非常によく似たものを作成しました。 ButtonBehaviorsを作成しました。これをアタッチすると、中間クラスに並べ替え列が設定され、基本レベルのコレクションとは独立して並べ替えることができます。

これは、1つのクラスよりもはるかに大きなインフラストラクチャです。 他のXAMLプラットフォームでは、CollectionViewSourceは分離されたクラスではありません。 特定の方法で他のクラスと相互作用します。 この機能には、一連のコントロール、動作、コマンドなどが必要です。 たとえば、プロパティ名のリストを(エイリアス別に)表示するアクションシートがあり、ユーザーがリストからアイテムを選択すると、CollectionViewSourceがそのプロパティによる並べ替えをトリガーします。

これがすぐに実装されない場合、サードパーティのコントロールなどはさらに独自の接線で機能し、各コントロールに固有のハッキーな並べ替え/フィルタリング機能にますます多くの作業を注ぎ込みます。 コードはリストタイプのコントロール間で共有されません。これは、長期的にはXamarinフォームにとって一般的に悪いことです。

特定のコントロールに実装されているが、その機能は他の同様のコントロールと共有されていない並べ替え機能の例を次に示します。https

@PureWeen 、この問題については情報が必要ですか? CollectionViewSourceは、XAMLベースのテクノロジ全体にわたるMicrosoftの標準です。 さらにどのような情報が必要ですか?

申し訳ありませんが、ここであなたの質問を見逃したに違いありません。

どのような互換性を参照していますか? XAMLがCollectionViewSourcesに対して採用した一般的な構文だけですか?

WPF、Silverlight、およびUWP全体で、CollectionViewSourceを実装するコントロールは同じように機能します。 不足しているCollectionViewSourceの穴を埋めるためにサードパーティのコントロール(SfDataGridなど)が導入されると、標準のMicrosoft XAMLベースのCollectionViewSource機能と互換性のない並べ替え、フィルタリング、およびグループ化が行われます。 コントロールを構築するのは常にサードパーティに固有のものになります

これは絶対に必要です。

@jassmithありがとう!

さあ、これはとても必要です。 フィルタまたは順序が変更されたため、リストを再構築します。

ここを参照してください:実際には最善の解決策ではありません。
https://forums.xamarin.com/discussion/32481/observablecollection-with-filter

絶対に必要な、これはXamarinで痛々しいほど欠落しているWPFの非常に便利なアイテムです。

この機能要求は、WPFSystem.Windows.Data.CollectionViewまたはSystem.ComponentModel.ICollectionViewとはまったく同じではない新しいXamarinForms 4.0 CollectionViewコントロールにどのように干渉しますか?

WPFでの長年の経験を経て、XamarinFormsを使い始めたばかりです。 また、XamarinにCollectionViewSourceが実装されていないことに非常に失望しています。

CollectionViewSourceのようなものがあるかどうか疑問に思っていたのでここに来ました。 このような機能は、モバイルアプリの構築に使用するテクノロジー(Xamarin.Formsなど)を検討する際に重要です。
組み込みのサポートがない限り、私は自分の実装に固執する必要があります。

何かが足りない場合を除いて、 UWPのCollectionViewSourceにも組み込みの並べ替えがありません。

WindowsCommunityToolkitにはUWPアドオン

私は詳細に精通していません。 そこで何が行われたかを確認したり、UWPに取り組んでいる人々と標準ソリューションを調整したりすることにメリットがある場合に備えて言及します。

また、このUWPの欠落している機能と拡張のいくつかの試みについてのSOの議論。

「これが必要」のリングに私の仮想帽子を投げるためにここに来ました。 自動フィルタリング、並べ替え、およびグループ化は、WPF / XAMLエクスペリエンスの非常に基本的な部分であるため、ここXamarinで必要かどうかという問題でさえあるのかと頭を悩ませています。

@jbhaywood他の多くのものと同様に、それは完全に必要です。

残念ながら、CollectionViewSourceのようなものは十分にセクシーではないため、Microsoftの従業員はブログ投稿や会議で自慢することができます。 また、MicrosoftはXamarin.Forms自体を製品に使用していないため、開発者の問題点すら感じていません。

このページは役に立ちましたか?
0 / 5 - 0 評価