0

我在 ListView 的 DataTemplate 中获取绑定时遇到问题。我的绑定目标是 KeyValuePair。(我使用适用于 Windows 8 的 Metro App)

我有一本字典

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

我尝试绑定它:

<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>

我懂了: 输入屏幕截图 xaml 绑定

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

4

2 回答 2

3

尝试指定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>

但你可能需要一个ObservableDictionary

或者您可能只是遇到了这个错误:http : //social.msdn.microsoft.com/Forums/en-AU/winappswithcsharp/thread/234a17ad-975f-42f6-aa91-7212deda4190 我通过谷歌搜索找到的clrIkeyvaluepairimpl

于 2012-11-03T10:27:45.117 回答
0

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

所以创建一个类,如:

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

像这样使用它应该可以解决问题:

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

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

于 2016-02-12T20:55:03.700 回答