/// <summary> /// focus on a node. /// </summary> /// <param name="node"></param> public void FocusOn(Node node) { var parent = node.Parent ?? Root; var oldFocusList = FocusList; FocusList = parent.ChildNodeList; if (oldFocusList == FocusList) { FocusList.SelectItem(node); } else { if (oldFocusList != null) { oldFocusList.SelectionChanged -= FocusList_SelectionChanged; } if (node != null) { FocusList.SelectItem(node); } FocusList.SelectionChanged += FocusList_SelectionChanged; OnFocusNodeChanged?.Invoke(FocusList, new FocusNodeChangedArgs { SelectedNode = FocusList.SelectedItem, DeselectNode = oldFocusList?.SelectedItem }); } }
/// <summary> /// on the focus item changed. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FocusList_SelectionChanged(object sender, SelectableList <Node> .SelectChangedEventArgs e) { OnFocusNodeChanged?.Invoke(sender, new FocusNodeChangedArgs { SelectedNode = e.SelectItem, DeselectNode = e.DeselectItem }); }