ItemsSource vs DataContext-Bindung Fall
Meine wichtigste Frage ist, über die Bindung Fall in der Szene, wir haben mehrere Quellen für ein Steuerelement(combobox innen datagrid -) (oder beide datacontext und itemssource). Wie können wir dann wissen, welche Quelle die Bindung verwenden? (der syntax zu klären)
Unter der Annahme einer datagrid hat eine itemssource="Liste der Player" datacontext="Manager"
und hat eine combobox als eine Art Säule. Wir gehen ebenfalls davon aus, dass jeder Spieler hat ein Inventar-Eigenschaft, die eine Sammlung geben.
dann im datagrid.Spalten:
- Die aktuelle Quelle jeder Spalte(für die Bindung) ist ein Spieler(so verstehe ich es bisher). Wir können nur binden, um die Eigenschaft der Spieler nicht an die Eigenschaft datacontext "manager". Es gibt keine Art und Weise zu binden, um die Eigenschaft der "Manager". Bin ich richtig?
- Jedoch, wenn wir uns bewegen, um die combobox-Spalten, dann nehme ich das lassen combobox die itemssource ='player 's inventory', dann wird die aktuelle Quelle für comboboxItem wird jedes Element in der Inventar. Und wenn ich die Bindung, es kann nur binden, um die Eigenschaft dieser Elemente.
Aber manchmal sehe ich den code, dass wir auch die Bindung an das Eigentum des Spielers innerhalb der combobox die Eigenschaft besonders Ausgewählten Wert und SelectedItem. Ich bin ein wenig verwirrt hier
können Sie mir helfen?
danke
InformationsquelleAutor Tai | 2010-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Schlüssel Steuern, um zu denken, ist eine
ItemsControl
(ComboBox
erbt vonItemsControl
und dieDataGrid
verhält sich sehr ähnlich).Einer
ItemsControl
hatItemsSource
Eigenschaft des TypsIEnumerable
. Es hat auch dieItemTemplate
Eigenschaft. Was Sie tun werden, ist erstellen Sie eine Kopie davonItemTemplate
für jedes Element inItemsSource
. DieDataContext
desItemTemplate
wird jedes Element in derItemsSource
.In Ihrem Fall der
ComboBox
, dieDataContext
desDataGrid
's Spalte wird IhrePlayer
Objekt. Wenn Sie binden dieComboBox
'sItemSource
zu einemPlayer
's Inventar, dann bekommen Sie jedes Element in IhremComboBox
's Liste.Die Sache zu beachten ist, dass die
DataContext
desComboBox
selbst ist unverändert. Es ist immer noch diePlayer
Objekt. Wenn Sie angeben, dass einItemTemplate
für IhreComboBox
, das ist, was es istDataContext
auf die Elemente in einemPlayer
's Inventar.InformationsquelleAutor Stephan
Seine wirklich einfach.
DataContext bezieht sich auf die gleiche Eigenschaft der Elemente. Wird es nicht verlängert und nicht dynamisch. DataContext gilt für die Kinder die Eigenschaften, die derzeit in der übergeordneten.
Aber ItemsSource ist dynamisch. Es wird erweitert zusammen mit der Quelle. Hier ist ein gud Beispiel.
Dies ist ein Beispiel von xaml.
Hier ist der code hinter.
Wie Sie sehen können, den DataContext gilt für die Textblöcke, die es in den StackPanel und beziehen sich auf eine einzelne Eigenschaft, dass ist Text.
In der Erwägung, dass ItemsSource bezieht sich auf die Quelle des Bild-und Text-Eigenschaft von Textblock und die Elemente innerhalb der Liste kann erweitert werden, zusammen mit der ObservableCollection.
- Oder um es noch einfacher für Sie.
DataContext - Wert eingestellt ist, basierend auf dem design.
ItemsSource - Wert eingestellt ist, basierend auf der Logik.
Hoffe, das hilft.
Markieren Sie diese als Antwort, wenn dies Ihre Frage beantwortet.
Seine die gleiche Sache. Wenn Sie ein Listenfeld mit 2 Textblöcke wie gesagt in dem Beispiel. Sie können die Verwendung der DataContext die Daten zu binden. Falls es verfügt über verschiedene Bedienelemente wie seine Kinder, dann mit ItemsSource wäre die beste option. Beide sind DataBinding Phänomen in verschiedenen Szenarien eingesetzt.
InformationsquelleAutor Aswin Ramakrishnan