3 Stimmen

WPF-Datenbindung an System.Data.Linq.Table<T>, wie kann die Schnittstelle aktualisiert werden?

Ich habe diese Combo an eine Linq-Tabelle gebunden. Gibt es eine einfache Möglichkeit, die UI (Combo-Werte, die dem Benutzer angezeigt werden) zu aktualisieren, wenn ich einen neuen Datensatz in der Linq-Tabelle einfügen?

Im Grunde aus, was ich verstehe, sollte ich eine ObservableCollection verwendet haben, aber ich möchte nicht die Daten hin und her aus der Linq-Tabelle zu dieser Sammlung zu kopieren, ich möchte nur Daten in der Linq-Tabelle haben.

Ist das möglich?

EDIT

OK Hier ist, was ich getan habe (und es funktioniert immer noch nicht):

    private ObservableCollection<Categories> m_Categories;
    private ObservableCollection<Categories> Categories
    {
        get
        {
            return m_Categories;
        }
    }

in der XAML habe ich:

                 <ComboBox Name="cmbCategory" 
                           ItemsSource="{Binding Categories}"
                           DisplayMemberPath="Name"
                           SelectedValuePath="Id"
                           />

Also, ganz einfach.

       //if i have a new category, i want to update the combo's content
        if (frmEditCategory.ShowDialog() == true)
        {
            //get the new category and add it to the ObservableCollection
            LibraryDataStore.Instance.Categories.ToList().ForEach(p => 
            {
                if (!m_Categories.Contains(p))
                {
                    m_Categories.Add(p);
                }
            });

            //update the target? is this correct?!
            BindingExpression be = cmbCategory.GetBindingExpression(ComboBox.ItemsSourceProperty);
            if (be != null)
                be.UpdateTarget();     
        }

Mit dem Debugger geprüft, enthält m_Categories die neue Kategorie, aber sie wird nicht in der Combo angezeigt.

Kennen Sie auch eine gute Anleitung oder einen Blogbeitrag über Combo-Bindung?...

Ich danke Ihnen im Voraus

2voto

Charlie Punkte 14841

Was Sie verlangen, ist nicht möglich. Sie brauchen eine Art von Vermittler, und Sie haben bereits den richtigen gefunden. ObservableCollection . Sie müssen die Linq-Daten irgendwohin verschieben, wenn Sie möchten, dass Ihre Benutzeroberfläche benachrichtigt wird, wenn sich die Daten ändern. Sie sollten eine ObservableCollection , dem Sie Ihre Linq-Daten hinzufügen, und dann sollten Sie das Kombinationsfeld an die ObservableCollection und nicht direkt auf den Tisch. Dies ist die einfachste und leichteste Lösung, die Sie erstellen können, und Sie erhalten dennoch automatische Änderungsbenachrichtigungen.

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