[英]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.