void Initialize(IGridViewColumnDescsProvider descsProvider)
        {
            if (descsProvider is null)
            {
                return;
            }
            Debug2.Assert(this.descsProvider is null);
            this.descsProvider = descsProvider;
            descsProvider.Descs.SortedColumnChanged += OnSortedColumnChanged;
            listView.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(ListView_Click));

            var gridView = (GridView)listView.View;

            gridView.Columns.CollectionChanged += GridView_Columns_CollectionChanged;

            var cols     = gridView.Columns;
            var idToDesc = new Dictionary <int, GridViewColumnDesc>();

            foreach (var desc in descsProvider.Descs.Columns)
            {
                idToDesc.Add(desc.Id, desc);
            }
            foreach (var col in cols)
            {
                int colId = GetId(col);
                if (!idToDesc.TryGetValue(colId, out var desc))
                {
                    throw new InvalidOperationException("Missing GridViewColumn Id");
                }
                toDesc.Add(col, desc);
                col.Header = desc.Name;
            }

            UpdateColumns();
        }
 public static void SetColumnProvider(FrameworkElement element, IGridViewColumnDescsProvider value) => element.SetValue(ColumnProviderProperty, value);