![](/img/trans.png)
[英]CollectionView Throws InvalidCastException or empty with ObservableCollection
[英]LongListSelector and ObservableCollection throws InvalidCastException
我試圖將我的收藏綁定到LLS,但是我收到了InvalidCastException。 如果我使用ListBox而不是LLS-所有綁定都可以正常工作。 這是我的收藏:
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()
{
}
}
這是我將其綁定到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;
和public FriendList FriendList = new FriendList();
在頁面ctor下方。 我做錯了什么? 字符串this.AllFriendsList.ItemsSource = FriendList;
會引發異常this.AllFriendsList.ItemsSource = FriendList;
這是我的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:如果我在此示例中使用分組,並且將列表分組
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;
它工作正常。 如果我理解正確-LLS等待一個分組的源。
我通過將IsFlat更改為True解決了相同的問題。
<toolkit:LongListSelector Name="AllFriendsList" ItemsSource="{Binding FriendList}" IsFlat="True">
您將兩次綁定到您的AllFiendsList。 第一次通過xaml在這里
<toolkit:LongListSelector Name="AllFriendsList" ItemsSource="{Binding FriendList}">
第二次通過代碼。 這可能會導致異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.