您需要DataTemplate
在您的中使用 aListBox
以确保列表框知道如何呈现其内容。假设您遵循上述基于类的方法:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding value}">
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DataTemplate
这将为您添加到其中的每个项目创建一个,ListBox
其中包含一个文本块,该文本块绑定到添加的项目的属性
阅读绑定 - 它是 WPF/WP7/Silverlight 中最强大的功能之一,并且可能是最广泛的绑定实现之一
http://www.mono-software.com/blog/post/Mono/166/Data-binding-in-Windows-Phone-7-application/
编辑:
虽然我很确定 ListBox 的默认模板只是在每个项目上调用 'ToString()' ......所以它应该可以正常工作!
哦,考虑让成员成为自动属性而不是字段:
public string ID { get; set; }
编辑:
好的,我对 Linq 不是很好,但由于查询应该返回一个IEnumerable<KeyValuePair<string, string>>
据我所见,你可以枚举它并建立你的对象,例如
var myList = new ObservableCollection<MyClass>();
foreach(var kvp in dict)
{
myList.Add(new MyClass(kvp.Key, kvp.Value));
// Or myList.Add(new MyClass() { ID = kvp.Key, Value = kvp.Value }); depending on your constructor
}
话虽如此,你没有理由不能只指向字典项的键/值(KeyValuePair<string, string>
就像其他任何东西一样只是一个引用类型)
这:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Key}">
<TextBlock Text="{Binding Value}">
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
应该给你
{Key}
{Value}
{Key}
{Value}
{Key}
{Value}
在您的列表框中
假设您不需要结果项中的任何其他功能KeyValuePair
就足够了。创建一个类只是为了显示一些值可能是矫枉过正,因为您已经完成了 99% 的工作。
您可能想查看一些 MVVM 模式,并且可能想要查看 MVVM 框架(我有偏见,因为我一直使用它,但 Caliburn.Micro 非常容易上手并支持 WP7)。
您的代码不会更复杂,但某些事情会为您连接起来,它会为您提供更多关于绑定等问题的反馈(有些绑定很难弄清楚,尤其是当弹出窗口/上下文菜单是涉及)
如果您对基于 XAML 的技术进行开发是认真的,它们与 MVVM 模式齐头并进,而一个框架让事情变得轻而易举
If you are interested there's an easy to follow tut here:
https://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&referringTitle=Documentation
Another variation on the same tut with a bit more info is here:
http://buksbaum.us/2010/08/01/caliburn-micro-hello-world/