1

People ハブに表示されているように、連絡先のリストを表示する必要がある 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");
    }

しかし、このページを開くと、連絡先の読み込みに時間がかかりすぎます。ただし、People ハブで同じ連絡先リストを開くと、読み込みが大幅に速くなりました。では、連絡先を即座にロードするにはどうすればよいでしょうか。

4

1 に答える 1

0

画像をプリロードして、BitmapImage として保存できます。そのため、ページを開くたびに画像をリロードする必要はありません。そして、それらを非同期にロードする方法が必要だと思います。

新しいクラスを作成し、新しいクラスのリストを LongListMultiSelector にバインドするだけです

新しいクラス:

prop contact、prop BitmapImage

于 2013-07-17T07:59:42.907 に答える