0

私が持っているリストから非常に特定のタイプのデータを表示できるように、リストビューの作成に「コールバック」があるかどうかはわかりません。私が知っているのは、完全なリストのみをListViewにバインドできるということですが、Datasource Delegateを使用して、iOSで行われるように、どのようにチェックを行うことができますか。

誰 ?

4

2 に答える 2

2

フィルタリングとグループ化は、従来、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;

お役に立てば幸いです。

于 2012-07-30T20:53:42.583 に答える
1

解決しようとしている正確なシナリオは100%わかりませんが、既存のデータソースにフィルターされたビューを作成する方法はいくつかあります。また、これがXAMLなのかJavaScriptなのかはわかりません。JavaScriptの部分に答えます。

もちろん、取得したデータを必要な形式に再ラップすることもできます。

他のいくつかのオプションを選択することもできます。

  • WinJS.Binding.ListをcreateFilterメソッドと一緒に使用します。見る:

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

于 2012-07-25T04:41:02.210 に答える