C# MVVM SelectedValue from组合框返回Null

C# MVVM SelectedValue from组合框返回Null,c#,wpf,mvvm,combobox,selectedvalue,C#,Wpf,Mvvm,Combobox,Selectedvalue,我有个问题。我有一个带有stringbrand,stringmodel,。。 我还有一个包含数据的组合框视图。当我从组合框“carBrand”或组合框“carModel”中选择一个项目并单击按钮时,我想创建一个新的汽车对象。但是在点击按钮后,carBrand.SelectedValue.ToString()会传递一个Null值,与carModel相同,尽管我从组合框中选择了一个项目 <!--CarModel ComboBox--> <ComboBox x:Name="car

我有个问题。我有一个带有
string
brand,
string
model,。。 我还有一个包含数据的
组合框
视图。当我从
组合框
“carBrand”或
组合框
“carModel”中选择一个项目并单击按钮时,我想创建一个新的汽车对象。但是在点击按钮后,
carBrand.SelectedValue.ToString()
会传递一个
Null
值,与carModel相同,尽管我从
组合框中选择了一个项目

 <!--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> 
在我的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
    //...
}
 <!--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> 
现在我的查看类

 <!--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> 

我希望有人能帮我解决这个问题

 <!--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> 
提前谢谢

因此,简单的答案(我想,我还没有测试过)是,
组合框
上没有设置
SelectedValuePath
(如vesan在评论中所述)。
 <!--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> 
这意味着
SelectedValue
将始终为
null

 <!--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> 
您可以使用
SelectedItem
返回所选
Car
,然后从中获取属性,或者只需在
组合框上设置
SelectedValuePath

 <!--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> 

现在,使用绑定当然可以改善这一点,但这取决于您是否要实现它。

尝试将selecteditem属性绑定到组合框中的selecteditem。SelectedValue
null?我无法在您的XAML中看到此元素。理想情况下,您应该将
SelectedValue
绑定到视图模型的属性(可能是现在绑定
ItemsSource
的位置)并从中检索它。
 <!--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>