Frage

Wie nenne ich Explicityl so etwas wie "Dofilter" auf System.Windows.Controls.ItemCollection?

Ich richte seine Filtereigenschaft auf ein Prädikat ein. Ich habe einen Haltepunkt in das Prädikat platziert, er greife nur dann dort, wenn die ItemsCollection initialisiert wird, wenn ich m_itemscollection aufrufe. Refresh () ist es nicht.

War es hilfreich?

Lösung

Es gibt mehrere Situationen, in denen .Refresh () nicht funktioniert, aber dies tut:

collection.Filter = collection.Filter;

Ich bin vor einigen Monaten darauf getroffen. Anscheinend gibt es einen Fehler, der die ItemsControl in bestimmten Situationen zuverlässig den Aufruf erfrischt () weitergeben lässt. Ich habe die Details nicht untersucht.

Andere Tipps

Der Grund, warum Aktualisierung manchmal nicht funktioniert, ist, dass dieser Code für die ElementsCollection verwendet wird:

   /// <summary>
    /// Set/get a filter callback to filter out items in collection.
    /// This property will always accept a filter, but the collection view for the
    /// underlying ItemsSource may not actually support filtering.
    /// Please check <seealso cref="CanFilter"/>
    /// </summary>
    /// <exception cref="NotSupportedException">
    /// Collections assigned to ItemsSource may not support filtering and could throw a NotSupportedException.
    /// Use <seealso cref="CanFilter"/> property to test if filtering is supported before assigning
    /// a non-null Filter value.
    /// </exception>
    public override Predicate<object> Filter
    {
        get
        {
            return (EnsureCollectionView()) ? _collectionView.Filter : MyFilter;
        }
        set
        {
            MyFilter = value;
            if (_collectionView != null)
                _collectionView.Filter = value;
        }
    } 

Der Filter wird eher auf die zugrunde liegende Sammelansicht als auf die itemsCollection selbst festgelegt.

Und dann tue die Basis -Aktualisierungsmethode nicht tatsächlich etwas an, um es zu tun _collectionView, Erfrischt tut also nichts!

/// <summary>
    /// Re-create the view, using any <seealso cref="SortDescriptions"/> and/or <seealso cref="Filter"/>.
    /// </summary>
    public virtual void Refresh()
    {
        IEditableCollectionView ecv = this as IEditableCollectionView;
        if (ecv != null && (ecv.IsAddingNew || ecv.IsEditingItem))
            throw new InvalidOperationException(SR.Get(SRID.MemberNotAllowedDuringAddOrEdit, "Refresh"));

        RefreshInternal();
    }  

Es tut mir leid, auf alte Frage zu antworten, aber es war wert, klären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top