2009-08-24 3 views
2

Es erscheint in einer Datenvorlage:Einstellung ComboBox.SelectedIndex Breaks OneWayToSource Bindung Auf ComboBox.SelectedItem

<ComboBox IsSynchronizedWithCurrentItem="False" 
      SelectedIndex="0" 
      SelectedItem="{Binding Path=Value, Mode=OneWayToSource}" 
      ItemsSource="{Binding Path=EnumeratedValues, Mode=OneTime}"/> 

Mit SelectedIndex gesetzt wird (wie oben dargestellt), die OneWayToSource zu Value Bindung funktioniert nicht. Wenn ich nicht SelectedIndex setze, ist die Bindung an Value in Ordnung.

Aber ich würde wirklich SelectedIndex-0 weil setzen will, wenn ich es weglassen Einstellung keine Element wird standardmäßig im ComboBox ausgewählt.

Kann jemand einen Weg sehen, dass ich meine Bindung an Value arbeiten kann, während gleichzeitig sicherstellen, dass das erste Element in ComboBox standardmäßig ausgewählt ist?

+0

Dave, nichts erscheint zwischen ... erscheint in einer Datenvorlage: und mit SelectedIndex wird gesetzt (wie oben gezeigt) ... Gibt es einige Quellcode fehlt? – Stewbob

+0

Macht nichts, es zeigt sich jetzt. – Stewbob

+0

Ich habe das gleiche Problem, und wenn die Leute sagen wollen, dass es auf diese Weise einfach nicht funktioniert, dann bin ich schockiert. Auch was wäre der Zweck von SelectedIndex, da alle ComboBoxen an etwas gebunden sein müssen (sonst wären sie nutzlos). –

Antwort

1

Warum nicht eine bidirektionale Bindung und nur die Value-Eigenschaft Ihres Objekts im Code zurückstellen?

Bearbeiten: Erläuterung hinzugefügt: Dies ermöglicht Ihnen, nur mit Ihrem Business-Objekt zu arbeiten. Der Zweck der Verwendung der Datenbindung besteht darin, Ihre Geschäftsobjekte von der Benutzeroberfläche zu trennen und Ihr Geschäftsobjekt einfach zu bearbeiten, sodass die Benutzeroberfläche dies widerspiegelt.

+0

Ich habe das tatsächlich berücksichtigt, aber für SelectedIndex. Ungeachtet dessen, wofür ich es tue, wird es schwierig, weil die ComboBox, von der ich versuche, Value von zu bevölkern, in einer Datenvorlage vergraben ist und diese Datenvorlage nicht immer verwendet wird. Ich habe zwei Datenvorlagen (die andere hat keine ComboBox), und die zu verwendende wird von einem DataTemplateSelector gewählt. Ich weiß nicht, wie ich die ComboBox (wenn sie existiert) programmatisch erreichen kann, daher meine Bemühungen, in XAML zu arbeiten. Aber ich habe das Gefühl, dass ich in die Richtung gehen muss, in die du vorschlägst, und lernst, wie man das programmatisch macht. – Dave

+0

Ich sage nicht, dass Sie etwas mit der Datenvorlage oder den Comboboxen machen sollten. Ich sage, dass Sie das Geschäftsobjekt aktualisieren, an das Ihr Benutzer gebunden ist. Wenn Sie eine bidirektionale Bindung haben, wird die Benutzerschnittstelle aktualisiert, um diese Änderung widerzuspiegeln. Wenn Sie die Datenbindung korrekt durchführen, sollten Sie nur mit Geschäftsobjekten arbeiten und niemals Sachen wie cmbCustomer.SelectedIndex = 0; –