gpt4 book ai didi

windows-runtime - 将字典绑定(bind)到 WinRT 列表框

转载 作者:行者123 更新时间:2023-12-04 07:12:30 27 4
gpt4 key购买 nike

我已经阅读了许多关于将 Dictionary 绑定(bind)到 WPF ListView 和 ListBox 的帖子,但我无法获得在 WinRT 中工作的等效代码。

<Grid Margin="10" Width="1000" VerticalAlignment="Stretch">
<ListBox Name="StatListView" ItemsSource="{Binding FooDictionary}" >
<ListBox.ItemTemplate>
<DataTemplate >
<Grid Margin="6">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Key}" Margin="5" />
<TextBlock Text="{Binding Value}" Margin="5" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>


public Dictionary<string, string> FooDictionary
{
get
{
Dictionary<string, string> temp = new Dictionary<string, string>();
temp.Add("key1", "value1");
temp.Add("key2", "value2");
temp.Add("key3", "value3");
temp.Add("key4", "value4");
return temp;
}
}

什么是正确的绑定(bind)?

最佳答案

输出窗口中的错误是(修剪到最有用的部分):

Error: Cannot get 'Key' value (type 'String') from type 
'System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl`2
[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, ....

在内部,WinRT 将类型转换为:
System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl<K, V>

如果您添加到您的 DataTemplate:
<TextBlock Text="{Binding}" Margin="5" />

你会看到它使用 String, String 发出上述类型。 .

但是,由于某种原因,它没有按预期正确处理。如果您在 Internet 上搜索该类型,您会看到有一个 documented bug关于 Connect 的问题。

一个简单的解决方法是将您的数据放在一个不是 KeyValuePair 的简单对象中:
List<StringKeyValue> temp = new List<StringKeyValue>();
temp.Add(new StringKeyValue { Key = "key1", Value = "value1" } );
temp.Add(new StringKeyValue { Key = "key2", Value = "value2" });
temp.Add(new StringKeyValue { Key = "key3", Value = "value3" });
temp.Add(new StringKeyValue { Key = "key4", Value = "value4" });

this.DefaultViewModel["FooDictionary"] = temp;

public class StringKeyValue
{
public string Key { get; set; }
public string Value { get; set; }
}

顺便说一句,至少从一个简单的测试来看,导致问题的根本不是字典,而是它是 KeyValuePair 的事实。正在转换为 CLRIKeyValuePairImpl 的对象实例上面提到的类型。我尝试使用列表并添加 KeyValuePair<string, string>实例到一个列表,这也失败了。

关于windows-runtime - 将字典绑定(bind)到 WinRT 列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com