private bool SaveQatControlData(
            VM.QatItemCollection remainingItems,
            VM.ControlData controlData)
        {
            bool matched = false;

            for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++)
            {
                VM.QatItem qatItem = remainingItems[qatIndex];
                if (qatItem.Instance == controlData)
                {
                    if (qatItem.IsSplitHeader)
                    {
                        // This is the case of the Header of a SplitButton
                        // or a SplitMenuItem added to the QAT. Note -1 is
                        // the sentinel being used to indicate this case.

                        qatItem.ControlIndices.Add(-1);
                    }

                    remainingItems.Remove(qatItem);
                    qatIndex--;
                    matched = true;
                }
            }

            VM.MenuButtonData menuButtonData = controlData as VM.MenuButtonData;
            if (menuButtonData != null)
            {
                for (int controlIndex = 0; controlIndex < menuButtonData.ControlDataCollection.Count && remainingItems.Count > 0; controlIndex++)
                {
                    controlData = menuButtonData.ControlDataCollection[controlIndex];

                    for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++)
                    {
                        VM.QatItem qatItem = remainingItems[qatIndex];
                        qatItem.ControlIndices.Add(controlIndex);
                    }

                    matched = SaveQatControlData(remainingItems, controlData);
                    if (!matched)
                    {
                        for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++)
                        {
                            VM.QatItem qatItem = remainingItems[qatIndex];
                            qatItem.ControlIndices.RemoveAt(qatItem.ControlIndices.Count - 1);
                        }
                    }
                }
            }

            return matched;
        }