2010-02-23 3 views
20

의사 예 : '은 XAML의 다음 버전에서 가능할 것이다 (제네릭 형식 인수를 지정 할 수있는 방법이 없기 때문에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/ 질문/2494823/binding-dictionaryt-a-wpf-listbox – Ben

답변

27

당신은, XAML에서 직접 Dictionary<TKey, TValue> 클래스를 사용할 수 있지만, 그것은 원 VS2010 WPF 디자이너에서 지원 될 수 있습니다 ... 적어도 초기 릴리스에는 없습니다).

그러나 Dictionary<TKey, TValue>에서 상속하는 비제로 클래스를 선언하고 XAML에서 사용할 수 있습니다.

C#

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

XAML related question에서

<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

XAML *의 차기 버전에서 * 구현이 계획되면 어떤 힌트를 얻을 수 있습니까? – Shimmy

+0

@Shimmy : 실제로 XAML 2009에서 이미 구현되었습니다. VS2010은 아직 XAML 2009를 지원하지 않습니다. ( –

+2

자세한 내용은 http://channel9.msdn.com/pdc2008/TL36/ (XAML 2009)을 참조하십시오. 새로운 기능은 7'20부터 시작합니다. –

5

내가 하나의 사용자 정의를 사용하여 XAML 2009 기능없이 XAML에서 일반 사전을 만들 수있는 방법을 보여주는 answer했다 Markup Extension 대신에

+0

예. – Shimmy

+0

@Shimmy : Thanks :) –

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 : Specialized = "clr-namespace : System.Collections.Specialized; assembly = System"' – 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

관련 문제