2011-01-09 4 views
0

(Bitte beachten - Ich bin ein Silverlight-Anfänger und suche hier nach der einfachsten Lösung, z. B. das Schreiben/Installieren eines Ersatzes für das ComboBox-Steuerelement!)Silverlight 4 ComboBox - Bindung an Nullable-Daten (versucht TargetNullValue aber funktioniert nicht wie erwartet)

Das ist ein Problem mit einer Silverlight 4-Anwendung, die den MVVM (View Model) -Ansatz verwendet. Ich habe ein einfaches Formular zum Bearbeiten eines "Product" -Objekts. Produkt hat eine CategoryID-Eigenschaft, die nullable (int?) Ist. Eine ComboBox wird verwendet, um die CategoryID anzuzeigen und festzulegen - sie ist an eine ObservableCollection von Categories gebunden. Das Produkt hat auch eine Anzahl von nicht nullbaren Eigenschaften, die an TextBoxen gebunden sind.

Ich möchte, dass der Benutzer "N/A" in der ComboBox für ein Produkt ohne Kategorie anzeigt, und diese "N/A" -Option verwenden, um CategoryID auf Null zu setzen. Also habe ich manuell ein Category-Objekt mit CategoryID = 0 und CategoryName = "N/A" zur Sammlung hinzugefügt; Dann setze ich TargetNullValue = 0 in der SelectedValue Binding der ComboBox. Mein Gedanke war - wenn der ComboBox SelectedValue an eine CategoryID von null gebunden war, würde er Null ersetzen und daher die Option "N/A" wählen.

Wenn ein Produkt mit einer CategoryID ungleich Null bearbeitet wird, funktioniert alles. Allerdings, wenn ein Null-CategoryID gefunden wird, können zwei Probleme auftreten:

  1. Keine Option in der ComboBox ausgewählt ist (seine blank)

  2. Die ComboBox Bindung ab diesem Punkt gebrochen scheint - jedes Produkt I anschließend bearbeiten (einschließlich solcher mit einer CategoryID ungleich null) hat nichts in der ComboBox ausgewählt (es ist immer noch mit allen Kategorien gefüllt - nur kein ausgewähltes Element).

Ich habe Berichte von Problem gesehen # 2 (here, here), aber ich habe den Eindruck, dass 1 # gearbeitet haben soll.

Was fehlt mir, um die Option "N/A" auszuwählen?

XAML für ComboBox:

<ComboBox x:Name="cboCategory" ItemsSource="{Binding colCategories, Mode=OneWay}" SelectedValuePath="CategoryID" DisplayMemberPath="CategoryName" SelectedValue="{Binding CurrentProduct.CategoryID, Mode=TwoWay, TargetNullValue=0}" Height="24" Width="344"></ComboBox> 

Antwort

Verwandte Themen