2016-10-11 1 views
1

Comment ajouter les éléments de la zone de liste de manière dynamique?VSTO Ribbon Combo Box Ajouter des éléments de façon dynamique

J'ai une zone de liste déroulante, où j'appellerai l'API pendant l'événement OnChange Call Back. Vous avez un problème de chargement des articles à zone de liste déroulante

public void OnChange(Office.IRibbonControl control, string text) 
    {    
     var result = GETMembersList("https://restcountries.eu/rest/v1/all"); 

     var members = from member in result 
         select member; 

     foreach (var member in members) 
     { 
      dsMember mem = new dsMember(); 
      mem.Id = member["numericCode"].ToString(); 
      mem.Name = member["name"].ToString(); 

      RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem(); 
      item.Label = mem.Name; 
      **cmbMembers.Items.Add(item);** ?? //problem here, cant access the combo box 
     } 

Ribbon.xml

<?xml version="1.0" encoding="UTF-8"?> 
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
    <ribbon> 
    <tabs> 
     <tab id="tabTest" label="TEST"> 
     <group id="grpTest"> 
      <comboBox id="cmbMembers" label="Users" showImage="false" 
        onChange="OnChange"/> 
     </group> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 
+0

Avez-vous essayé 'Globals.Ribbons.Ribbon1.cmbMembers.Items.Add (item);'? – haindl

+0

@ haindl j'ai essayé, mais Ribbon1 est null. –

+1

Du point de vue Office, il n'y a aucun moyen de créer des rubans sans XML. Peu importe si vous utilisez VSTO, un addin COM ou VBA, vous avez toujours besoin de ce Ribbon.xml. Le concepteur de ruban VSTO est vraiment juste un moyen de faciliter ce processus. Du point de vue XML, il existe deux façons d'obtenir la liste déroulante remplie d'éléments. Si les éléments sont statiques et ne changent pas alors vous utilisez juste 'getItemCount/getItemID/getItemLabel' sur le' 'mais si les éléments changent pendant l'exécution alors vous devez utiliser un' 'au lieu du' ' et construisez un '

' à l'intérieur de 'getContent'. – haindl

Répondre

0

VISTO a un problème, moi aussi essayé d'ajouter plusieurs éléments de code derrière, mais quelque chose a mal tourné. Mais, les éléments existants peuvent être modifiés dynamiquement. Essayez de modifier l'événement Ribbon1_Load.

public partial class Ribbon1 
{ 
    private void Ribbon1_Load(object sender, RibbonUIEventArgs e) 
    { 
     this.comboBox1.Items[0].Label = "new Lable"; 
    } 
}