una tener entrada diccionario debe clave cada asociada xaml dictionary key-value idictionary

xaml - cada entrada de diccionario debe tener una clave asociada



Crear un diccionario en xaml? (4)

En una pregunta relacionada, di una answer que muestra cómo se podría crear un diccionario genérico en XAML sin las características de XAML 2009 utilizando una extensión de marcado personalizada en su lugar.

Pseudo ejemplo:

<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>


No puede usar la clase Dictionary<TKey, TValue> directamente en XAML, porque no hay forma de especificar los argumentos de tipo genérico (será posible en la próxima versión de XAML, pero no será compatible con el diseñador VS2010 WPF ... al menos no en la versión inicial).

Sin embargo, puede declarar una clase no genérica que hereda de Dictionary<TKey, TValue> y usarla en XAML.

DO#

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>


Pruebe algo como esto:

use este espacio de nombres: 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>


Si las claves y los valores son cadenas, puede usar ListDictionary o HybridDictionary.

Por ejemplo:

<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>