2 Stimmen

WP7 Einfügen aller Linq-Ergebnisse in eine ObservableCollection

Ich parse ein Xml-Ergebnis von einem Webservice mit Linq:

XElement items = XElement.Parse(e.Result);
MyListBox.ItemsSource = from item in items.Descendants("node")
            select new MyViewModel
            {
               ...
            };

Dies füllt automatisch meine ListBox. Aber das Problem ist, ich in der Regel meine ObservableCollection wie diese zugreifen:

App.MyViewModel.MyItems;

in meinem Xaml haben:

ItemsSource="{Binding MyItems,}"

Wie kann ich meine ObservableCollection direkt ändern? Ich lese LINQ-Ergebnis in ObservableCollection umwandeln und versuchte dies:

var v = from item in items.Descendants("node")
            select new MyViewModel
            {
               ...
            };
OApp.MyViewModel.MyItems = new ObservableCollection<MyViewModel>(v);

Aber ich kann nicht, da dies in WP7 (Silverlight 3), und es gibt keine Konstruktor wie diese

Danke!

1voto

AnthonyWJones Punkte 182582

Ich würde einfach eine statische Methode wie diese erfinden:-

public static ObservableCollection<T> CreateObservableCollect<T>(IEnumerable<T> range)
{
    var result = new ObservableCollection<T>();
    foreach (T item in range)
    {
        result.Add(item);
    }
    return result;
}

Die letzte Zeile des Codes lautet nun:-

 OApp.MyViewModel.MyItems = new CreateObservableCollection<MyViewModel>(v);

0voto

Matt Lacey Punkte 64983

Der Konstruktor, den Sie zu verwenden versuchen, ist in Silverlight, nur nicht auf dem Telefon verfügbar. (gemäß MSDN )

Leider müssen Sie Ihre ObservableCollection selbst auffüllen.

0voto

Rover Punkte 2163

Brauchen Sie ObservableCollection? Müssen Sie Objekte aus der Sammlung hinzufügen oder löschen oder nur aktualisieren?

Wenn nur aktualisieren, können Sie MyViewModel.MyItems zu ändern:

public MyTypeOfCollection MyItems
{
    get { return _myItems; }
    set
    {
        _myItems = value;
        OnNotifyPropertyChanged("MyItems");//invoke INotifyPropertyChanged.PropertyChanged
    }
}

Wenn Sie Elemente hinzufügen oder löschen müssen, können Sie Ihre Sammlung erweitern:

public static class Extend
{
    // Extend ObservableCollection<T> Class
    public static void AddRange(this System.Collections.ObjectModel.ObservableCollection o, T[] items)
    {
        foreach (var item in items)
        {
            o.Add(item);
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X