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(); } }
/// <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(); } }