私が持っているリストから非常に特定のタイプのデータを表示できるように、リストビューの作成に「コールバック」があるかどうかはわかりません。私が知っているのは、完全なリストのみをListViewにバインドできるということですが、Datasource Delegateを使用して、iOSで行われるように、どのようにチェックを行うことができますか。
誰 ?
フィルタリングとグループ化は、従来、CollectionViewSourceを使用して行われました。残念ながら、CollectionViewSourceにはFilterイベントまたはGroupDescriptionsプロパティがありません。フィルタリングとグループ化はサポートされていないように見えるかもしれませんが、どちらもLINQを使用して実現できます。
Xamlで、ページの[リソース]セクションにCollectionViewSourceを追加します。IsSourceGroupedがtrueに設定されていることを確認してください。
<common:LayoutAwarePage.Resources>
<!--
Collection of grouped items displayed by this page, bound to a subset
of the complete item list because items in groups cannot be virtualized
-->
<CollectionViewSource x:Name="GroupsCV" Source="{Binding Groups}" IsSourceGrouped="True" />
</common:LayoutAwarePage.Resources>
ここで、CollectionViewSource(GroupsCV)をGridViewのItemsSourceとして設定する必要があります。
<GridView ItemsSource="{Binding Source={StaticResource GroupsCV}}" />
CollectionViewSourceがGroupsというプロパティにバインドされていることに注意してください。このプロパティは私のViewModelの一部です。Groupsプロパティによって返される値は、LINQクエリの結果になります。プロパティが返すタイプがわからなかったため、最初は混乱しました。私は、比較可能なアイテムの列挙可能なグループ化に落ち着きました。これは、あらゆるタイプのあらゆるLINQクエリでほぼ機能します。
したがって、ViewModel(またはDataContextが何であれ)に次のプロパティを追加します。
private IEnumerable<IGrouping<IComparable, TItem>> groups;
public IEnumerable<IGrouping<IComparable, TItem>> Groups
{
get { return groups; }
set { SetProperty(ref groups, value); }
}
これで、グループ化またはフィルターを変更するときはいつでも、Groupsプロパティを次のようにLINQクエリと等しく設定するだけです。
Groups = from i in musicItems
group i by i.Genre into g
orderby g.Key
select g;
LINQは既知のプロパティ名でうまく機能しますが、ユーザーがプロパティ名のリストから選択して、そのプロパティで動的にグループ化できるようにするのはどうでしょうか。LYNQがグループを作成できるようにするための唯一の要件は、渡すものは何でもIComparableを実装する必要があるということです。
プロパティの名前を文字列として受け取り、 IComparableを返す小さな拡張メソッドを次に示します。
static public IComparable GetComparableValue<T>(this T item, string propName) where T : class
{
return (IComparable)typeof(T).GetTypeInfo().GetDeclaredProperty(propName).GetValue(item, null);
}
これが適切な場所にあると、次のようなプロパティ名で動的クエリを実行できます。
string groupByPropertyName = "Artist";
Groups = from i in musicItems
group i by i.GetComparableValue(groupByPropertyName) into g
orderby g.Key
select g;
お役に立てば幸いです。
解決しようとしている正確なシナリオは100%わかりませんが、既存のデータソースにフィルターされたビューを作成する方法はいくつかあります。また、これがXAMLなのかJavaScriptなのかはわかりません。JavaScriptの部分に答えます。
もちろん、取得したデータを必要な形式に再ラップすることもできます。
他のいくつかのオプションを選択することもできます。
http://msdn.microsoft.com/en-us/library/windows/apps/Hh700774.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh465496.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh700741.aspx
http://msdn.microsoft.com/en-us/library/windows/apps/hh465464.aspx