/ / Slovník <String, String> nezaväzuje v xaml (Metro App) - .net, xaml, viazanie, windows-8, windows-runtime

Slovník <reťazec, reťazec> nezaväzuje v xaml (Metro App) - .net, xaml, viazanie, windows-8, windows-runtime

Mám problém sa dostať záväzné práce v DataTemplate z ListView.Môj záväzný cieľ je KeyValuePair (pracujem s Metro App pre Windows 8)

Mám slovník

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

Pokúsim sa to zviazať:

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

Ale KeyPairValue na to nereaguje (nič nezviaže). Ale ak budem robiť to záväzné:

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

Vidím: zadajte screenshot xaml binding

Skoré toto záväzné fungovanie správne v aplikácii pre Windows Phone 7. Čo sa stalo v systéme Windows 8?

odpovede:

3 pre odpoveď č. 1

Skúste špecifikovať 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žno budete potrebovať ObservableDictionary

Alebo sa môžete stať proti tejto chybe: http://social.msdn.microsoft.com/Forums/en-AU/winappswithcsharp/thread/234a17ad-975f-42f6-aa91-7212deda4190 ktorú som našiel pri prechádzaní clrIkeyvaluepairimpl


0 pre odpoveď č. 2

Ďalším riešením je použiť zoznam s vlastnýmPár kľúčov / hodnôt namiesto Slovníka. Dôvodom je, že IEnumerable> sa použije na zozname párov kľúč / hodnota prítomných v slovníku počas väzby. Problém je v programe KeyValuPair, nie v skutočnom slovníku, pretože sa konvertuje na System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl a pri zadávaní tohto typu je problém.

Takže vytvoriť triedu ako:

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

A používať to ako by to malo urobiť trik:

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

zdroj: http://www.sohuaz.xyz/questions/683779/binding-a-dictionary-to-a-winrt-listbox