15

WPF、.NET4.0のDataGridコントロールにICollectionViewのプロパティタイプをバインドしています。

で使用FilterICollectionViewます。

    public ICollectionView CallsView
    {
        get
        {
            return _callsView;
        }
        set
        {
            _callsView = value;
            NotifyOfPropertyChange(() => CallsView);
        }
    }

    private void FilterCalls()
    {
        if (CallsView != null)
        {
            CallsView.Filter = new Predicate<object>(FilterOut);
            CallsView.Refresh();
        }
    }

    private bool FilterOut(object item)
    {
       //..
    }

ICollectionビューの初期化:

IList<Call> source;
CallsView = CollectionViewSource.GetDefaultView(source);

私はこの問題を解決しようとしています:

たとえば、ソースデータ数は1000アイテムです。フィルタを使用します。DataGridコントロールでは、200個のアイテムのみを表示します。

ICollection現在のビューをに変換したいIList<Call>

4

4 に答える 4

1

System.Component.ICollectionViewは IList を実装していないため、単に ToList() を呼び出すことはできません。Niloo が既に回答したように、最初にコレクション ビューでアイテムをキャストする必要があります。

次の拡張メソッドを使用できます。

/// <summary>
/// Casts a System.ComponentModel.ICollectionView of as a System.Collections.Generic.List&lt;T&gt; of the specified type.
/// </summary>
/// <typeparam name="TResult">The type to cast the elements of <paramref name="source"/> to.</typeparam>
/// <param name="source">The System.ComponentModel.ICollectionView that needs to be casted to a System.Collections.Generic.List&lt;T&gt; of the specified type.</param>
/// <returns>A System.Collections.Generic.List&lt;T&gt; that contains each element of the <paramref name="source"/>
/// sequence cast to the specified type.</returns>
/// <exception cref="ArgumentNullException"><paramref name="source"/> is <c>null</c>.</exception>
/// <exception cref="InvalidCastException">An element in the sequence cannot be cast to the type <typeparamref name="TResult"/>.</exception>
[SuppressMessage("Microsoft.Design", "CA1002:DoNotExposeGenericLists", Justification = "Method is provided for convenience.")]
public static List<TResult> AsList<TResult>(this ICollectionView source)
{
    return source.Cast<TResult>().ToList();
}

使用法:

var collectionViewList = MyCollectionViewSource.View.AsList<Call>();
于 2014-04-09T10:01:47.337 に答える
1

Silverlight でこの問題に遭遇しましたが、WPF でも同じです。

IEnumerable<call> calls = collectionViewSource.View.Cast<call>();

于 2013-01-29T04:35:33.127 に答える
0

拡張メソッドを使用して変換できますか:

IList<Call> source = collection.ToList();
于 2012-03-01T11:18:44.477 に答える