簡體   English   中英

如何在中綁定電話聯系人

[英]How do I bind Phone Contacts in <toolkit:LongListMultiSelector in WP8?

我想在LongListMultiSelector中顯示我的電話聯系人。 之前我使用列表框顯示電話聯系人...我的實現方式是:xaml

 <ListBox Name="ContactResultsData" ItemsSource="{Binding}"  Height="331" Margin="12,0" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" >
                            <Border BorderThickness="2" HorizontalAlignment="Left" VerticalAlignment="Center" BorderBrush="{StaticResource PhoneAccentBrush}" >
                                <Image Source="{Binding Converter={StaticResource ContactPictureConverter}}" Width="48" Height="48" Stretch="Fill"  />
                            </Border>
                            <TextBlock Name="ContactResults" Text="{Binding Path=DisplayName, Mode=OneWay}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Margin="18,8,0,0" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

和C#

private void SearchContacts_Click(object sender, RoutedEventArgs e)
        {
           ContactResultsData.DataContext = null;
            Contacts cons = new Contacts();
            cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);
        }
        void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
        {
            try
            {
                ContactResultsData.DataContext = e.Results;
            }
            catch (System.Exception)
            {
            }
        }

現在盡管有列表框,但我仍要在LongListMultiSelector中顯示它。

我怎樣才能做到這一點?

現在我正在使用視圖模型

public partial class ContactsView : PhoneApplicationPage
    {
public ContactsViewModel()
        {
            var cons = new Microsoft.Phone.UserData.Contacts();
            cons.SearchAsync(String.Empty, FilterKind.None, null);
            cons.SearchCompleted += ContactsSearchCompleted;
        }
        private void ContactsSearchCompleted(object sender, ContactsSearchEventArgs e)
        {
            PhoneContacts = new ObservableCollection<Contact>(e.Results.OrderBy(c => c.DisplayName));

        }

        private ObservableCollection<Contact> _phoneContacts;
        public ObservableCollection<Contact> PhoneContacts
        {
            get { return _phoneContacts; }
            set
            {
                _phoneContacts = value;
                RaisePropertyChanged("PhoneContacts");
            }
        }
}

如何將此viewModel綁定到LongListMultiSelector,以便可以看到ObservableCollection聯系人數據? 就像圖..而不是郵件詳細信息一樣,我想顯示聯系方式。 電話聯系人http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/clip_5F00_image010_5F00_41CD2003.png

在大多數情況下,只需用phone:LongListSelector替換ListBox的所有實例就可以了。 在很多情況下,不建議在ListBox上使用LongListSelector(因為會發生某些意外功能),但應該可以正常使用。

<phone:LongListSelector ItemsSource="{Binding DataList}">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate/>
    </phone:LongListSelector.ItemTemmplate>
</phone:LongListSelector>

我將視圖模型修改如下:

public class ContactsViewModel : ViewModelBase
{

    public ContactsViewModel()
    {
        Contacts cons = new Contacts();
        cons.SearchAsync(String.Empty, FilterKind.None, null);
        cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);

    }

    void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {

        try
        {

            PhoneContactsList = new List<Contact>(e.Results.OrderBy(c => c.DisplayName));
            System.Diagnostics.Debug.WriteLine("PhoneContacts phone" + PhoneContactsList);

        }
        catch (System.Exception)
        {
            //That's okay, no results
        }

    }

    //--------------------------------
    private List<Contact> _phoneContactsList;
    public List<Contact> PhoneContactsList
    {
        get { return _phoneContactsList; }
        set
        {
            _phoneContactsList = value;
            RaisePropertyChanged("PhoneContactsList");
        }
    }
}

而不是observablecollection,我使用的是列表。 在xaml中,我將PhoneContactsList綁定到我的longlistmultiselector,如下所示:

<toolkit:LongListMultiSelector x:Name="contactList" 
                                                Margin="0,14,-12,0"
                                                ItemsSource="{Binding PhoneContactsList}"
                                                LayoutMode="List"
                                                ItemTemplate="{StaticResource ContactItemTemplate}"
            />

其中ContactItemTemplate如下:

 <DataTemplate x:Key="ContactItemTemplate">
            <StackPanel Margin="0,-14,0,24" >
                <TextBlock Text="{Binding Path=DisplayName, Mode=OneWay}" 
                                       Margin="0,0,0,-4"
                                       FontSize="{StaticResource PhoneFontSizeExtraLarge}" 
                                       FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>

                <ListBox ItemsSource="{Binding Path=PhoneNumbers}" Height="60"  Margin="36,0,0,0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <TextBlock Grid.Column="0" Text="{Binding Path=Kind, Mode=OneWay}" />
                                <TextBlock Grid.Column="1" Text=":  " />
                                <TextBlock Grid.Column="2" Text="{Binding Path=PhoneNumber, Mode=OneWay}" />
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

            </StackPanel>
        </DataTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM