.net 字典<;字符串,字符串>;未在xaml中绑定(Metro应用程序)

.net 字典<;字符串,字符串>;未在xaml中绑定(Metro应用程序),.net,xaml,binding,windows-8,windows-runtime,.net,Xaml,Binding,Windows 8,Windows Runtime,在ListView的DataTemplate中进行绑定时遇到问题。我的绑定目标是KeyValuePair。(我使用适用于Windows 8的Metro应用程序) 我有一本字典 Params = new Dictionary<string, string>(); Params.Add("Key1", "Value1"); Params.Add("Key1", "Value2"); Params=newdictionary(); 参数添加(“键1”、“值1”); 参数添加(“键1”、“

在ListView的DataTemplate中进行绑定时遇到问题。我的绑定目标是KeyValuePair。(我使用适用于Windows 8的Metro应用程序)

我有一本字典

Params = new Dictionary<string, string>();
Params.Add("Key1", "Value1");
Params.Add("Key1", "Value2");
Params=newdictionary();
参数添加(“键1”、“值1”);
参数添加(“键1”、“值2”);
我试着把它绑起来:

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

但是KeyPairValue不会对此做出反应(没有绑定)。但如果我这样做:

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

我明白了:


此早期绑定在适用于Windows Phone 7的应用程序中正常工作。Windows 8中发生了什么?

请尝试指定
路径=

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

但你可能需要一个


或者您可能正好遇到了这个错误:我通过谷歌搜索找到了这个错误。
clrIkeyvaluepairimpl
尝试指定
路径=

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

但你可能需要一个


或者您可能遇到了这个错误:我通过谷歌搜索找到了这个错误。另一个解决方案是使用带有自定义键/值对的列表而不是字典。原因是IEnumerable>将用于列出绑定期间字典中存在的键/值对。问题在于KeyValuePair,而不是Dictionary,因为它被转换为System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl,并且绑定到此类型时出现问题

因此,创建一个类,如:

public class XamlFriendlyKeyValuePair<Tkey, TValue> 
{
    public TKey Key {get; set;}
    public TValue Value {get; set;} 
}
公共类XamlFriendlyKeyValuePair
{
公钥{get;set;}
公共TValue值{get;set;}
}
像这样使用它应该可以做到:

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

来源:

另一种解决方案是使用带有自定义键/值对的列表,而不是字典。原因是IEnumerable>将用于列出绑定期间字典中存在的键/值对。问题在于KeyValuePair,而不是Dictionary,因为它被转换为System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl,并且绑定到此类型时出现问题

因此,创建一个类,如:

public class XamlFriendlyKeyValuePair<Tkey, TValue> 
{
    public TKey Key {get; set;}
    public TValue Value {get; set;} 
}
公共类XamlFriendlyKeyValuePair
{
公钥{get;set;}
公共TValue值{get;set;}
}
像这样使用它应该可以做到:

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

来源:

我尝试使用ObservableDictionary或SpecificationPath,但没有帮助。也许这是一个错误(你知道这次如何解决它吗?不,对不起,请按照我找到的bug的链接进行操作。哦,他们关闭了bug…但没有修复程序2013年2月-仍然无法绑定到字典,有人有任何干净的解决方法吗?我正在将使用字典的模型包装到一个类中,该类将它们公开为列表:(@Stony如果我的答案中的链接对你没有帮助,请尝试提出一个新问题,并详细说明你正在做什么。我尝试使用ObservableDictionary或SpecificationPath,但没有帮助。也许这是一个错误:(你知道这次如何解决它吗?不,对不起,请按照我找到的bug的链接进行操作。哦,他们关闭了bug…但没有修复程序2013年2月-仍然无法绑定到字典,有人有任何干净的解决方法吗?我正在将使用字典的模型包装到一个类中,该类将它们公开为列表:(@Stony如果我回答中的链接对你没有帮助,试着问一个新问题,更详细地说明你在做什么。