Ribbondropdown только теряя детали


Я добавляю элементы в RibbonDropDown, который используется новым инспектором электронной почты во время выполнения. Я добавляю элементы при запуске, а также обновляю список по требованию (, когда пользователь нажимает кнопку )

public void RefreshListNames()
{
    Logger.Log("Refresh Mail Lists");

    Globals.Ribbons.Ribbon1.rddListNames.Items.Clear();
    foreach (KeyValuePair<Guid, string> kvp in _dda.GetMarketingListNames())
    {
        Microsoft.Office.Tools.Ribbon.RibbonDropDownItem dd = 
            Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();

        dd.Tag = kvp.Key;
        dd.Label = kvp.Value;

        Logger.Log("Adding " + dd.Label);

        Globals.Ribbons.Ribbon1.rddListNames.Items.Add(dd);

    }

    Globals.Ribbons.Ribbon1.rddListNames.ResumeLayout();
}

Примечание: rddListNames является RibbonDropDown

Этот метод вызывается в методе ThisAddIn_Startup и заполняется corectly при запуске. Однако любое новое окно Почты заканчивается пустым выпадающим списком-нет элементов. Даже обновление списка не добавляет элементы обратно.

I добавлено некоторое ведение журнала: он показывает, что метод запускается при нажатии кнопки "Обновить":

23/04/2013 14:36:43 - Refresh Mail Lists 
23/04/2013 14:36:45 - Adding Marketing List - Dynamic 
23/04/2013 14:36:45 - Adding Marketing List - Bs 
23/04/2013 14:36:45 - Adding Marketing List - As

Почему выпадающий список продолжает терять элементы? И почему они не возвращаются, даже если я явно обновляю их?

1 4

1 ответ:

Если вы вносите изменения управления в ленточный пользовательский интерфейс , вам нужно сделать недействительным кэш управления через IRibbonControl.Invalidate() или IRibbonControl.InvalidateControl. Это вызовет перекраску элементов ленты.

Globals.Ribbons.Ribbon1.Invalidate();
// or...
Globals.Ribbons.Ribbon1.InvalidateControl("ddMarketingList");