public ControlDetailsViewModel(IVisual control) { if (control is AvaloniaObject avaloniaObject) { Properties = AvaloniaPropertyRegistry.Instance.GetRegistered(avaloniaObject) .Concat(AvaloniaPropertyRegistry.Instance.GetRegisteredAttached(avaloniaObject.GetType())) .Select(x => new PropertyDetails(avaloniaObject, x)) .OrderBy(x => x.Priority, s_priorityComparer) .ThenBy(x => x.IsAttached) .ThenBy(x => x.Name); var view = new CollectionViewBase(Properties); view.GroupDescriptions.Add(new PathGroupDescription(nameof(PropertyDetails.Group))); view.Filter = FilterProperty; PropertiesView = view; } }
/// <summary> /// Creates a collection view around the DataGrid's source. ICollectionViewFactory is /// used if the source implements it. Otherwise a PagedCollectionView is returned. /// </summary> /// <param name="source">Enumerable source for which to create a view</param> /// <returns>ICollectionView view over the provided source</returns> internal static ICollectionView CreateView(IEnumerable source) { Debug.Assert(source != null, "source unexpectedly null"); Debug.Assert(!(source is ICollectionView), "source is an ICollectionView"); ICollectionView collectionView = null; if (source is ICollectionViewFactory collectionViewFactory) { // If the source is a collection view factory, give it a chance to produce a custom collection view. collectionView = collectionViewFactory.CreateView(); // Intentionally not catching potential exception thrown by ICollectionViewFactory.CreateView(). } if (collectionView == null) { // If we still do not have a collection view, default to a PagedCollectionView. collectionView = new CollectionViewBase(source); } return(collectionView); }