0

私のコード:

 ObservableCollection<SampleCheckedData> interestrates = new ObservableCollection<SampleCheckedData>();
 XDocument xmlDocu = XDocument.Load(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(result)));

                interestrates = (from rts in xmlDocu.Descendants("Friend")

                                 select new SampleCheckedData
                                 {

                                     Id = (string)rts.Element("userid"),
                                     Name = (string)rts.Element("name"),
                                     Icon = (string)rts.Element("imageurl"),
                                     VisibleStatus = (string)rts.Element("visiblestatus"),
                                     AppStatus = (string)rts.Element("loginstatus"),

                                     imgBubble =bitmapRed,
                                 }).ToList<SampleCheckedData>();

次に、system.collection.generic.listをそのようなsystem.collection.observablecollectionに暗黙的に変換できないため、エラーが発生します。監視可能なコレクションを使用してリストボックスアイテムをバインドするにはどうすればよいですか?

編集:

Button b = sender as Button;
                    var res = interestrates.Where(a => a.Id.Equals(((System.Windows.FrameworkElement)(e.OriginalSource)).Tag)).ToList();
                    if (res.Count == 1)
                        interestrates.Remove(res.First());
                    interestrates = new ObservableCollection<SampleCheckedData>();
                    lstFriendRequuest.ItemsSource = "";
                    bindGetFriends();

ここではリストからアイテムを正常に削除していますが、アイテムを新しくバインドするbindGetFriends()を呼び出した後、新しいアイテムが古いアイテムを取得していません。サービスが古いアイテムのリストを返すのはなぜですか?

4

2 に答える 2

3

この拡張機能を使用します。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

public static class Extensions
{
    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> collection)
    {
        var observableCollection = new ObservableCollection<T>();
        foreach (var item in collection) observableCollection.Add(item);
        return observableCollection;
    }
}

使用法:

interestrates = (from rts in xmlDocu.Descendants("Friend") 
    select new SampleCheckedData
    {    
        Id = (string)rts.Element("userid"),
        Name = (string)rts.Element("name"),
        Icon = (string)rts.Element("imageurl"),
        VisibleStatus = (string)rts.Element("visiblestatus"),
        AppStatus = (string)rts.Element("loginstatus"),    
        imgBubble =bitmapRed,
    }).ToObservableCollection<SampleCheckedData>();
于 2012-06-12T10:35:51.280 に答える
1

ObservableコレクションをListに変更します。

List<SampleCheckedData> interestrates = new List<SampleCheckedData>();

ObservableCollectionの代わりにListをListBoxにバインドすることもできます

また、リストボックスから選択したアイテムを削除するという他の問題を解決するには、次のコードを試してください。

 var selectedIndex = listbox.SelectedIndex;
 var listItems = listbox.ItemsSource as List<SampleCheckedData>;
 listItems.RemoveAt(selectedIndex);
 listbox.ItemsSource = null;
 listbox.ItemsSource = listItems;

それでも問題が発生する場合は、お知らせください

于 2012-06-12T10:13:10.903 に答える