1

我正在尝试为 Windows 手机制作一个应用程序,该应用程序需要显示联系人列表,如人员中心所示。

这是用于显示联系人的 xaml。

<toolkit:LongListMultiSelector x:Name="ContactList" IsGroupingEnabled="True" HideEmptyGroups="True">
    <toolkit:LongListMultiSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Border BorderThickness="2" HorizontalAlignment="Left" BorderBrush="{StaticResource PhoneAccentBrush}" >
                    <Image Source=" {Binding Converter={StaticResource ContactPictureConverter}}" Width="48" Height="48" Stretch="Fill" />
                </Border>
                <TextBlock Text="{Binding Path=DisplayName, Mode=OneWay}" />
            </StackPanel>
        </DataTemplate>
    </toolkit:LongListMultiSelector.ItemTemplate>
</toolkit:LongListMultiSelector>

这是 ContactPictureConverter

public class ContactPictureConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Contact c = value as Contact;
        if (c == null) return null;

        System.IO.Stream imageStream = c.GetPicture();
        if (null != imageStream)
        {
            return Microsoft.Phone.PictureDecoder.DecodeJpeg(imageStream);
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我也将构造函数中的联系人分配如下

    public ContactListPage()
    {
        InitializeComponent();
        Contacts cons = new Contacts();
        cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>((sender,e)=>{ContactList.DataContext=e.Results;});
        cons.SearchAsync(String.Empty, FilterKind.None, "bla");
    }

但是当我打开这个页面时,联系人需要很长时间才能加载。但是,当我在人员中心打开相同的联系人列表时,它的加载速度要快得多。那么我该怎么做才能使联系人立即加载。

4

1 回答 1

0

您可以预加载图像并将它们保存为 BitmapImage。因此,您不必每次打开页面时都重新加载图像。而且我认为应该有一种方法可以异步加载它们。

只需创建一个新类并将新类的列表绑定到您的 LongListMultiSelector

新班级:

道具联系人,道具BitmapImage

于 2013-07-17T07:59:42.907 回答