private void OnselectionModelChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "SelectedIndices") { bool?oldValue = IsSelected; var indexPath = GetIndexPath(); bool?newValue = IsRealized(indexPath) ? SelectionModel.IsSelectedAt(indexPath) : false; if (oldValue != newValue) { IsSelected = newValue; bool oldValueAsBool = oldValue.HasValue && oldValue.Value; bool newValueAsBool = newValue.HasValue && newValue.Value; if (oldValueAsBool != newValueAsBool) { // AutomationEvents.PropertyChanged is used as a value that means dont raise anything AutomationEvents eventToRaise = oldValueAsBool ? (SelectionModel.SingleSelect ? AutomationEvents.PropertyChanged : AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection) : (SelectionModel.SingleSelect ? AutomationEvents.SelectionItemPatternOnElementSelected : AutomationEvents.SelectionItemPatternOnElementAddedToSelection); if (eventToRaise != AutomationEvents.PropertyChanged && AutomationPeer.ListenerExists(eventToRaise)) { var peer = FrameworkElementAutomationPeer.CreatePeerForElement(this); peer.RaiseAutomationEvent(eventToRaise); } } } } }
protected override void OnKeyUp(KeyRoutedEventArgs e) { var indexPath = GetIndexPath(); Debug.WriteLine("OnKeyUp:" + indexPath.ToString()); if (SelectionModel != null) { if (e.Key == VirtualKey.Escape) { SelectionModel.ClearSelection(); } else if (e.Key == VirtualKey.Space) { SelectionModel.SelectAt(indexPath); } else if (!SelectionModel.SingleSelect) { var isShiftPressed = Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.Shift).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var isCtrlPressed = Window.Current.CoreWindow.GetAsyncKeyState(VirtualKey.Control).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); if (e.Key == VirtualKey.A && isCtrlPressed) { SelectionModel.SelectAll(); } else if (isCtrlPressed && e.Key == VirtualKey.Space) { if (SelectionModel.IsSelectedAt(indexPath).Value) { SelectionModel.DeselectAt(indexPath); } else { SelectionModel.SelectAt(indexPath); } } else if (isShiftPressed) { SelectionModel.SelectRangeFromAnchorTo(GetIndexPath()); } } } base.OnKeyUp(e); }
protected override void OnPointerPressed(PointerRoutedEventArgs e) { if (!e.Handled) { var indexPath = GetIndexPath(); Debug.WriteLine("OnPointerPressed:" + indexPath.ToString()); if (SelectionModel != null) { if (e.KeyModifiers.HasFlag(VirtualKeyModifiers.Shift) && !SelectionModel.SingleSelect) { if (e.KeyModifiers.HasFlag(VirtualKeyModifiers.Control)) { SelectionModel.DeselectRangeFromAnchorTo(GetIndexPath()); } else { SelectionModel.SelectRangeFromAnchorTo(GetIndexPath()); } } else if (e.KeyModifiers.HasFlag(VirtualKeyModifiers.Control)) { var path = GetIndexPath(); if (SelectionModel.IsSelectedAt(path).Value) { SelectionModel.SelectAt(path); } else { SelectionModel.SelectAt(path); } } else { SelectionModel.SelectAt(GetIndexPath()); this.Focus(FocusState.Keyboard); } } e.Handled = true; base.OnPointerPressed(e); } }
private void ValidateSelection( SelectionModel selectionModel, List <IndexPath> expectedSelected, List <IndexPath> expectedPartialSelected = null, int selectedInnerNodes = 0) { Log.Comment("Validating Selection..."); Log.Comment("Selection contains indices:"); foreach (var index in selectionModel.SelectedIndices) { Log.Comment(" " + index.ToString()); } Log.Comment("Selection contains items:"); foreach (var item in selectionModel.SelectedItems) { Log.Comment(" " + item.ToString()); } if (selectionModel.Source != null) { List <IndexPath> allIndices = GetIndexPathsInSource(selectionModel.Source); foreach (var index in allIndices) { bool?isSelected = selectionModel.IsSelectedAt(index); if (Contains(expectedSelected, index)) { Verify.IsTrue(isSelected.Value, index + " is Selected"); } else if (expectedPartialSelected != null && Contains(expectedPartialSelected, index)) { Verify.IsNull(isSelected, index + " is partially Selected"); } else { if (isSelected == null) { Log.Comment("*************" + index + " is null"); Verify.Fail("Expected false but got null"); } else { Verify.IsFalse(isSelected.Value, index + " is not Selected"); } } } } else { foreach (var index in expectedSelected) { Verify.IsTrue(selectionModel.IsSelectedAt(index).Value, index + " is Selected"); } } if (expectedSelected.Count > 0) { Log.Comment("SelectedIndex is " + selectionModel.SelectedIndex); Verify.AreEqual(0, selectionModel.SelectedIndex.CompareTo(expectedSelected[0])); if (selectionModel.Source != null) { Verify.AreEqual(selectionModel.SelectedItem, GetData(selectionModel, expectedSelected[0])); } int itemsCount = selectionModel.SelectedItems.Count(); Verify.AreEqual(selectionModel.Source != null ? expectedSelected.Count - selectedInnerNodes : 0, itemsCount); int indicesCount = selectionModel.SelectedIndices.Count(); Verify.AreEqual(expectedSelected.Count - selectedInnerNodes, indicesCount); } Log.Comment("Validating Selection... done"); }