/ / Dictionary <String, String> niewiążący w Xaml (Metro App) - .net, xaml, binding, windows-8, windows-runtime

Słownik <String, String> niewiążący w Xaml (Metro App) - .net, xaml, binding, windows-8, windows-runtime

Mam problem z wiązaniem pracującym w DataTemplate z ListView. Moim wiążącym celem jest KeyValuePair. (Pracuję z aplikacją Metro dla Windows 8)

Mam słownik

Params = new Dictionary<string, string>();
Params.Add("Key1", "Value1");
Params.Add("Key1", "Value2");

Próbuję powiązać:

<ListView ItemsSource="{Binding Params}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Key}"></TextBlock>
<TextBlock Text="{Binding Value}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Ale KeyPairValue nie reaguje na to (nic nie wiąże). Ale jeśli zrobię to wiążące:

<ListView ItemsSource="{Binding Params}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Widzę: wprowadź zrzut ekranu xaml

Wczesne powiązanie działa poprawnie w aplikacji dla systemu Windows Phone 7. Co się stało w systemie Windows 8?

Odpowiedzi:

3 dla odpowiedzi № 1

Spróbuj określić Path=:

<ListView ItemsSource="{Binding Path=Params}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Key}"></TextBlock>
<TextBlock Text="{Binding Path=Value}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Ale możesz potrzebować ObservableDictionary

Lub możesz po prostu walczyć z tym błędem: http://social.msdn.microsoft.com/Forums/en-AU/winappswithcsharp/thread/234a17ad-975f-42f6-aa91-7212deda4190 które znalazłem przez googlowanie clrIkeyvaluepairimpl


0 dla odpowiedzi nr 2

Innym rozwiązaniem jest użycie Listy z niestandardowymPara klucz / wartość zamiast słownika. Powodem jest to, że IEnumerable> będzie używane do wyświetlania par Key / Value obecnych w słowniku podczas bindowania. Problem dotyczy KeyValuPair, a nie samego słownika, ponieważ jest konwertowany do System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl i pojawia się problem podczas wiązania z tym typem.

Więc tworząc klasę jak:

public class XamlFriendlyKeyValuePair<Tkey, TValue>
{
public TKey Key {get; set;}
public TValue Value {get; set;}
}

I używanie go w ten sposób powinno zrobić trik:

Params = new List<XamlFriendlyKeyValuePair<string, string>>();
Params.Add{"Key1", "Value1"};
Params.Add{"Key1", "Value2"};

Źródło: http://www.sohuaz.xyz/questions/683779/binding-a-dictionary-to-a-winrt-listbox