2010-02-23 13 views
20

छद्म उदाहरण: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

अधिक https://stackoverflow.com/ प्रश्न/24 9 4823/बाइंडिंग-डिक्शनरी-टू-ए-डब्ल्यूपीएफ-लिस्टबॉक्स – Ben

उत्तर

27

आप Dictionary<TKey, TValue> वर्ग सीधे XAML में, सामान्य प्रकार तर्क (निर्दिष्ट करने के लिए यह XAML के अगले संस्करण में संभव हो जाएगा कोई रास्ता नहीं है क्योंकि वहाँ उपयोग नहीं कर सकते, लेकिन यह जीत लिया ' वीएस -2010 डब्ल्यूपीएफ डिजाइनर में समर्थित नहीं है ... कम से कम प्रारंभिक रिलीज में नहीं)।

हालांकि, अगर आप एक गैर सामान्य वर्ग कि Dictionary<TKey, TValue> से विरासत ऐलान करते हैं और XAML में इसका इस्तेमाल कर सकते हैं।

सी #

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

इसका मतलब क्या है * एक्सएएमएल के अगले संस्करण में यह संभव होगा * क्या आपके पास इसे लागू करने की योजना है जब आपके पास कोई सुराग है? – Shimmy

+0

@Shimmy: वास्तव में, यह पहले से ही XAML 2009 में लागू किया गया है दुर्भाग्य से VS2010 अभी तक XAML 2009 का समर्थन नहीं करता :( –

+2

जानकारी के लिए, इस वीडियो देखें: http://channel9.msdn.com/pdc2008/TL36/ (XAML 2009 नई सुविधाओं 7'20 से शुरु करके) –

5

एक related question में मैं चलता जो कैसे एक एक कस्टम का उपयोग कर XAML 2009 सुविधाओं के बिना XAML में एक सामान्य शब्दकोश बना सकते हैं एक answer दिया इसके बजाय Markup Extension

+0

में कम से मैं यह जाँच मतलब हाँ यह बहुत अच्छा है! – Shimmy

+0

@Shimmy: धन्यवाद :) –

6

कुंजी और मूल्यों तार कर रहे हैं, तो आप ListDictionary या HybridDictionary उपयोग कर सकते हैं।

उदाहरण के लिए:

उपयोग इस नाम स्थान:

<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

नामस्थान घोषणा: 'xmlns: विशिष्ट =" clr-namespace: system.Collections.Specialized; असेंबली = सिस्टम "' – Pollitzer

4

कुछ इस तरह का प्रयास करें 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

पुरानी पोस्ट का नया उत्तर, लेकिन वास्तव में मुझे जो चाहिए था। – Pat