ImageConverter1}}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
为了简单起见,我们还利用一个ListBox控件来展示联系人信息。同时,我们也使用了典型的Silverlight数据绑定技术。总体来看,上面代码中只有一点值得注意,即图像数据的显示问题。为此,代码中使用了一个自定义的类型转换器。
列表8: 自定义的类型转换器代码
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (value == null || parameter == null)
{
return value;
}
return new BitmapImage(new Uri((string)value, UriKind.RelativeOrAbsolute));
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
注意,在本示例实现方案中,在构建联系人Contact的实例时,我们只持有在ThumbNail属性中存储的联系人相关缩略图的路径信息。上面转换器的关键在于Convert方法。在这个方法中,我们通过图片路径返回对应于缩略图的BitmapImage实例。然后,我们将它设置为图像控件的Source属性。
至于页面ContactList.xaml后台代码的实现就很简单了,如下所示。
列表9: 页面ContactList.xaml后台代码的实现
{
string selectedGroup = "";
if (NavigationContext.QueryString.TryGetValue("selectedGroup", out selectedGroup))
{
int iGroup = int.Parse(selectedGroup);
// Query from Database by key
var contactList =from key in
App.Database.Query().Where(
x => x.LazyValue.Value.GroupId == iGroup + 1).ToList() select key.LazyValue.Value;
MainListBox.ItemsSource=contactList;
}
}
OnNavigatedTo方法是Silverlight for WP7中的基本导航方法,不必再赘述了。在上面代码中,一旦我们接收下selectedGroup参数,我们即使用它来创建一个标准的Sterling查询语句。注意,要想全面领会这里的查询语句,你应该先知道LazyValue在Sterling使用中所起的重要作用。最后,我们把查询结果绑定到ListBox控件的ItemsSource属性。这就是全部!
四、总结
在本系列文章中,我们只是初步介绍了Sterling这款开源的面向对象嵌入式数据库在Silverlight for Windows Phone 7中的基本应用思路和操作技巧。很显然,如果读者以前未曾有过面向对象数据库方面的知识,你会感觉到Sterling的实现架构有些陌生。然而,如果您已经有扎实的C#面向对象和LINQ to Object基础,那么,快速入门Sterling也不是什么难事。当然,不同于传统的关系数据库,在使用Sterling前,你最好预先掌握一些面向对象程序设计技术,特别是掌握一些面向对象的数据库理论。随着Sterling在你心中不断扎根,你会发现Sterling是一个相当不错的工具-轻量级而且高效率,非常适合Windows Phone 7数据驱动应用程序的开发。实际上,本文介绍的只不过是触及了Sterling的一点皮毛,还有更多更好的东西等着您自己去深入挖掘。