private void ChangeCurrentDataGridContext() { if ((m_dataGridContext.ParentDataGridContext == null) || (m_dataGridContext.ParentItem == null)) { return; } List <DataGridContext> childContexts = this.GetParentItemChildContexts(); int currentContextIndex = childContexts.IndexOf(m_dataGridContext); if (childContexts.Count > 1) { if (currentContextIndex < (childContexts.Count - 1)) { // We are not the last context, we'll search for a // non-empty context after us. for (int i = currentContextIndex + 1; i < childContexts.Count; i++) { DataGridContext childContext = childContexts[i]; if (childContext.Items.Count == 0) { continue; } childContext.SetCurrentItemCore(childContext.Items.GetItemAt(0), false, this.ShouldSynchronizeSelectionWithCurrent, AutoScrollCurrentItemSourceTriggers.CollectionViewCurrentItemChanged); return; } } // No context have been found. We'll search for a // non-empty context before us. for (int i = currentContextIndex - 1; i >= 0; i--) { DataGridContext childContext = childContexts[i]; int count = childContext.Items.Count; if (count == 0) { continue; } childContext.SetCurrentItemCore(childContext.Items.GetItemAt(count - 1), false, this.ShouldSynchronizeSelectionWithCurrent, AutoScrollCurrentItemSourceTriggers.CollectionViewCurrentItemChanged); return; } } // No context after or before us have been found, we will set the CurrentItem to our ParentItem. m_dataGridContext.ParentDataGridContext.SetCurrentItemCore(m_dataGridContext.ParentItem, false, this.ShouldSynchronizeSelectionWithCurrent, AutoScrollCurrentItemSourceTriggers.CollectionViewCurrentItemChanged); }