2010-02-23 4 views
20

exemple Pseudo:Créer un dictionnaire dans xaml?

<Window> 
    <Window.Tag> 
    <x:Dictionary KeyType="{x:Type sys:String}" ValueType="{x:Type sys:Int32}"> 
     <sys:DictionaryEntry Entry="{sys:DictionaryEntry Key0, 000}"/> 
     <sys:DictionaryEntry Key="key1" Value="111"/> 
     <sys:DictionaryEntry> 
      <sys:DictionaryEntry.Key> 
      <sys:String>Key2<sys:String> 
      </sys:DictionaryEntry.Key>   
      <sys:DictionaryEntry.Value> 
      <sys:Int32>222</sys:Int32>    
      </sys:DictionaryEntry.Value> 
     </sys:DictionaryEntry> 
    </x:Dictionary />  
    </Window.Tag> 
</Window> 
+0

plus à jour la discussion à https://stackoverflow.com/ questions/2494823/binding-dictionaryt-to-a-wpf-listbox – Ben

Répondre

27

Vous ne pouvez pas utiliser la classe Dictionary<TKey, TValue> directement en XAML, parce qu'il n'y a aucun moyen de spécifier les arguments de type générique (il sera possible dans la prochaine version de XAML, mais il a gagné » t être pris en charge dans VS2010 WPF designer ... au moins pas dans la version initiale).

Cependant, vous pouvez déclarer une classe non générique qui hérite de Dictionary<TKey, TValue> et l'utiliser en XAML.

C#

public class MyDictionary : Dictionary<string, int> { } 

XAML

<Window> 
    <Window.Tag> 
    <local:MyDictionary> 
     <sys:Int32 x:Key="key0">0</sys:Int32> 
     <sys:Int32 x:Key="key1">111</sys:Int32> 
     <sys:Int32 x:Key="key2">222</sys:Int32> 
    </local:MyDictionary />  
    </Window.Tag> 
</Window> 
+0

Qu'entend-on par * cela sera possible dans la prochaine version de XAML * avez-vous des indices quand ils prévoient de l'implémenter? – Shimmy

+0

@Shimmy: en fait, il est déjà implémenté dans XAML 2009. Malheureusement VS2010 ne supporte pas encore XAML 2009 :( –

+2

Pour plus de détails, voir cette vidéo: http://channel9.msdn.com/pdc2008/TL36/ (XAML 2009 nouvelles fonctionnalités sont présentées à partir de 7'20) –

5

Dans un related question je lui ai donné un answer qui montre comment on pourrait créer un dictionnaire générique XAML sans XAML 2009 fonctions à l'aide d'une commande Markup Extension à la place.

+0

Je l'ai vérifié. – Shimmy

+0

@Shimmy: Merci :) –

6

Si les clés et les valeurs sont des chaînes, vous pouvez utiliser ListDictionary ou HybridDictionary.

Par exemple:

<Specialized:ListDictionary x:Key="MasterSlidesFileNames"> 
    <System:String x:Key="long">Ya long yes ni</System:String> 
    <System:String x:Key="Sun">Waterfall</System:String> 
    <System:String x:Key="lorem ipsum">hello wOrld</System:String> 
</Specialized:ListDictionary> 
+1

Déclaration d'espace de nommage: 'xmlns: Specialized =" espace de noms clr: System.Collections.Specialized; assembly = System "' – Pollitzer

4

Essayez quelque chose comme ceci:

utiliser cet espace de noms: xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib"

<ComboBox.ItemsSource> 
    <collections:ArrayList> 
     <collections:DictionaryEntry Key="0" Value="Standby"/> 
     <collections:DictionaryEntry Key="1" Value="Maintenance"/> 
     <collections:DictionaryEntry Key="2" Value="Available"/> 
     <collections:DictionaryEntry Key="3" Value="Deselected"/> 
     <collections:DictionaryEntry Key="4" Value="Input Error"/> 
    </collections:ArrayList> 
</ComboBox.ItemsSource> 
+0

Nouvelle réponse à un ancien message, mais exactement ce dont j'avais besoin. – Pat

Questions connexes