예제 #1
0
        protected override void OnSelectionChanged(SelectionChangedEventArgs e)
        {
            base.OnSelectionChanged(e);

            bool isVirtualizing = VirtualizingPanel.GetIsVirtualizing(this);
            bool isMultiSelect  = this.SelectionMode != SelectionMode.Single;

            if (isVirtualizing && isMultiSelect)
            {
                var newSelectedItems = this.SelectedItems.Cast <IListItemViewModel>().ToList();

                foreach (var deselectedItem in this.selectedItems.Except(newSelectedItems))
                {
                    deselectedItem.IsSelected = false;
                }

                this.selectedItems.Clear();
                this.selectedItems.AddRange(newSelectedItems);

                foreach (var newlySelectedItem in this.selectedItems)
                {
                    newlySelectedItem.IsSelected = true;
                }
            }
        }
 // Token: 0x06005CFE RID: 23806 RVA: 0x001A2A4B File Offset: 0x001A0C4B
 private void InvalidateDataGridCellsPanelMeasureAndArrange(bool withColumnVirtualization)
 {
     if (withColumnVirtualization == VirtualizingPanel.GetIsVirtualizing(this))
     {
         this.InvalidateDataGridCellsPanelMeasureAndArrange();
     }
 }
예제 #3
0
        /// <summary>
        /// Manually select the items...
        /// </summary>
        /// <param name="e">SelectionChangedEventArgs</param>
        protected override void OnSelectionChanged(SelectionChangedEventArgs e)
        {
            base.OnSelectionChanged(e);

            bool isVirtualizing = VirtualizingPanel.GetIsVirtualizing(this);
            bool isMultiSelect  = (SelectionMode != SelectionMode.Single);

            if (isVirtualizing && isMultiSelect)
            {
                var newSelectedItems = SelectedItems.Cast <IScrobbableObjectViewModel>();

                foreach (var deselectedItem in selectedItems.Except(newSelectedItems))
                {
                    deselectedItem.UpdateIsSelectedSilent(false);
                }

                selectedItems.Clear();
                selectedItems.AddRange(newSelectedItems);

                foreach (var newlySelectedItem in selectedItems)
                {
                    newlySelectedItem.UpdateIsSelectedSilent(true);
                }

                // todo: kinda hacky way to update the view...
                var lastItem = selectedItems.LastOrDefault();
                if (lastItem != null)
                {
                    lastItem.IsSelected = true;
                }
            }
        }
 /// <summary>
 ///     Helper method which invalidate the underlying itemshost's measure and arrange
 /// </summary>
 /// <param name="withColumnVirtualization">
 ///     True to invalidate only when virtualization is on.
 ///     False to invalidate only when virtualization is off.
 /// </param>
 private void InvalidateDataGridCellsPanelMeasureAndArrange(bool withColumnVirtualization)
 {
     // Invalidates measure and arrange if the flag and the virtualization
     // are either both true or both false.
     if (withColumnVirtualization == VirtualizingPanel.GetIsVirtualizing(this))
     {
         InvalidateDataGridCellsPanelMeasureAndArrange();
     }
 }