Ejemplo n.º 1
0
        // In PageManager we track selection by keeping track of the package unique ids (hence it's not affected by reordering)
        // In ListView, the selection is tracked by indices. As a result, when we update the itemsSource, we want to sync selection index if needed
        // Because there might be some sort of reordering
        private void SyncPageManagerSelectionToListView(PageSelection selection = null)
        {
            var visualStates = itemsSource as List <VisualState>;

            if (visualStates == null)
            {
                return;
            }

            var page = m_PageManager.GetCurrentPage();

            if (page.tab != PackageFilterTab.AssetStore)
            {
                return;
            }

            selection ??= page.GetSelection();
            var oldSelectedVisualStates = selectedItems.Select(item => item as VisualState).ToArray();

            if (oldSelectedVisualStates.Length == selection.Count && oldSelectedVisualStates.All(v => selection.Contains(v.packageUniqueId)))
            {
                return;
            }

            var newSelectionIndices = new List <int>();

            for (var i = 0; i < visualStates.Count; i++)
            {
                if (selection.Contains(visualStates[i].packageUniqueId))
                {
                    newSelectionIndices.Add(i);
                }
            }
            SetSelection(newSelectionIndices);
        }
Ejemplo n.º 2
0
        private void OnSelectionChanged(PageSelection selection)
        {
            var currentView = this.currentView;

            foreach (var item in selection.previousSelections.Where(s => !selection.Contains(s.packageUniqueId)).Concat(selection))
            {
                currentView.GetPackageItem(item.packageUniqueId)?.RefreshSelection();
            }
        }