2013-07-17 76 views
1

我正在尝试为Windows Phone创建一个应用程序,该应用程序需要显示联系人列表,如人员中心中所示。联系图片加载时间太长

这是用于显示联系人的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> 

这是ContactPicureConverter

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"); 
    } 

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

回答

0

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

只是做一个新的类和新类的列表绑定到LongListMultiSelector

新类:

道具接触, 道具的BitmapImage