2016-04-17 12 views
0

Ich habe ein Problem. Ich habe eine Auto-Klasse mit string Marke, string Modell, .. Ich habe auch eine Ansicht mit einer ComboBox mit Daten. Wenn ich einen Artikel aus der ComboBox "AutoMarke" oder der ComboBox "AutoModell" auswähle und auf eine Schaltfläche klicke, möchte ich ein neues Auto-Objekt erstellen. Aber nach dem Klicken auf den Knopf liefert der carBrand.SelectedValue.ToString() einen Null Wert, selbe für carModel, obwohl ich einen Artikel vom ComboBox auswählte.MVVM SelectedValue von ComboBox gibt Null

In meinem VMClass:

Add a1 = new Add(); 
c_car m1 = param as c_car; 
a1.DataContext = m1; 
a1.ShowDialog(); 

if (a1.DialogResult.HasValue && a1.DialogResult.Value) 
{ 
    m1.c_brand = a1.carBrand.SelectedValue.ToString(); //causes NullReferenceException 
    m1.c_model = a1.carModel.SelectedValue.ToString(); //causes NullReferenceException 
    m1.c_year = a1.carYear.Content.ToString(); //this works perfectly 
    m1.c_km = Int32.Parse(a1.carKm.Content.ToString()); //this also works properly 
    //... 
} 

meine Ansicht Klasse Jetzt:

<!--CarModel ComboBox--> 
<ComboBox x:Name="carModel" Style="{StaticResource combobox}" Grid.Column="1" 
      Margin="20,15,17,14" 
      ItemsSource="{Binding ModelSelectedBrand}" DisplayMemberPath="c_model" MouseLeave="carModel_MouseLeave" 
      Grid.Row="2" VerticalAlignment="Center" Height="30" MouseDoubleClick="carModel_MouseDoubleClick"> 
</ComboBox> 

<!--CarYear EditableLabel--> 
<Label x:Name="carYear" Content="{Binding ElementName=carModel, Path=SelectedValue.c_year}" Margin="20,14,17,14" 
     Style="{StaticResource EditableLabelStyle}" Foreground="White" 
     Grid.Column="1" Grid.Row="5" VerticalAlignment="Center" Height="30"> 
</Label> 

<!--CarKM EditableLabel--> 
    <Label x:Name="carKm" 
     Content="{Binding ElementName=carModel, Path=SelectedItem.c_km}" Style="{StaticResource EditableLabelStyle}" 
     Margin="20,14,17,14" 
     Grid.Column="1" Grid.Row="3" Foreground="White" VerticalAlignment="Center" Height="30"> 
</Label> 

Ich hoffe, dass mir jemand Festsetzung dieses Problem helfen kann.

Vielen Dank im Voraus!

+0

versuchen, eine ausgewählte Eigenschaft an die ausgewählteEinheit in der Combobox zu binden – sexta13

+0

Ist Ihr 'autoBrand.SelectedValue' null? Ich kann dieses Element in Ihrem XAML nicht sehen. Idealerweise sollten Sie Ihren 'SelectedValue' an eine Eigenschaft Ihres Ansichtsmodells binden (wahrscheinlich, wo Sie jetzt Ihre' ItemsSource' binden) und sie von dort abrufen. – vesan

Antwort

0

Also die einfache Antwort (ich denke, ich habe noch nicht getestet) ist, dass es keine SelectedValuePath gesetzt auf Ihrem ComboBox (wie von Vesan in den Kommentaren angegeben). Dies bedeutet, dass SelectedValue immer null ist.

könnten Sie SelectedItem verwenden, um die ausgewählten Car und erhalten dann die Eigenschaft aus, dass oder einfach nur auf dem Münster ComboBox die SelectedValuePath zurückzukehren.

Nun könnte dies natürlich mit Bindings verbessert werden, aber das liegt an Ihnen, ob Sie dies implementieren möchten.