I'm trying to bind my collection to LLS, but I get an InvalidCastException. If i use ListBox instead of LLS - all binds work fine and good. Here is my collection:
public class Friend : INotifyPropertyChanged { private string name; public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } private string image; public string Image { get { return image; } set { image = value; OnPropertyChanged("Image"); } } private string sourseId; public string SourseId { get { return sourseId; } set { sourseId = value; OnPropertyChanged("SourseId"); } } private string online_image; public string Online_Image { get { return online_image; } set { online_image = value; if (online_image == "1") online_image = @"/icons/appbar.power.png"; OnPropertyChanged("Online_Image"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string info) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(info)); } } public Friend() { } } public class FriendList : ObservableCollection<Friend> { public FriendList() : base() { } }
And here is the way i bind it to LLS:
XDocument xml = XDocument.Load(e.Result); // MessageBox.Show(xml.ToString()); var users = from c in xml.Descendants("user") select c; foreach (var user in users) { Friend fr = new Friend(); fr.SourseId = (string)user.Element("uid").Value; fr.Image = (string)user.Element("photo_medium").Value; fr.Name = (string)user.Element("first_name").Value + " " + (string)user.Element("last_name").Value; fr.Online_Image = (string)user.Element("online").Value; if (fr.Online_Image == "1") fr.Online_Image = @"/icons/appbar.power.png"; FriendList.Add(fr); } this.AllFriendsList.ItemsSource = FriendList;
and public FriendList FriendList = new FriendList();
is just under the page ctor. What i'm doing wrong? Exception fires on string this.AllFriendsList.ItemsSource = FriendList;
And here is my xaml:
<toolkit:LongListSelector Name="AllFriendsList" ItemsSource="{Binding FriendList}"> <toolkit:LongListSelector.ItemTemplate> <DataTemplate> <Grid Height="75" Width="460" Margin="0,10,10,0"> <Line Style="{StaticResource Line1}" ></Line> <Line Style="{StaticResource Line2}" ></Line> <TextBlock Margin="75,15,40,0" FontSize="30" Name="Name" Text="{Binding Name}" Tap="GetUserInfo" /> <Image HorizontalAlignment="Left" Width="75" Name="Photo" > <Image.Source> <BitmapImage UriSource="{Binding Image}" CreateOptions="BackgroundCreation" /> </Image.Source> </Image> <Image HorizontalAlignment="Right" Name="IsOnline" Margin="0,0,0,0" Width="60" Height="60" Source="{Binding Online_Image}" /> </Grid> </DataTemplate> </toolkit:LongListSelector.ItemTemplate> </toolkit:LongListSelector>
UPD: If I use group such as in this example, and group my list like
var FriendsGroup = from fr in FriendList group fr by fr.Online_Image into c orderby c.Key select new Group<Friend>(c.Key, c); AllFriendsList.ItemsSource = FriendsGroup;
it works fine. If I understand correct - LLS waiting a grouped source.
Answer: 1
You are binding twice to the your AllFiendsList. The first time through the xaml here
<toolkit:LongListSelector Name="AllFriendsList" ItemsSource="{Binding FriendList}">
The second time through code. That may cause the exception.
by : derStevehttp://stackoverflow.com/users/36475
No comments:
Post a Comment
Send us your comment related to the topic mentioned on the blog