我是MVVM的新手,我想问一下,如果你能帮我把ComboBox中的SelectedValue带到我的VM-Class。在我的例子中,我有一个包含所有汽车品牌的ComboBox。如果我选择一个汽车品牌,我想在另一个ComboBox中选择汽车品牌的所有车型。我已经做过一些研究,但我无法找到解决问题的方法。
After clicking on the Brand-ComboBox.
到目前为止这很好,但是当我想显示模型时,ComboBox保持空白。
来自 View-Class 的代码:`
<ObjectDataProvider x:Key="vmcars" ObjectType="{x:Type local:VMCars}"/>
<!--MainGrid-->
<Grid DataContext="{StaticResource vmcars}">
.
.
.
.
</Grid>
来自 Brand-ComboBox 的代码:
<!--CarBrand Combobox-->
<ComboBox x:Name="carBrand" Style="{StaticResource combobox}"
ItemsSource="{Binding AllCars}"
Grid.Column="1" Grid.Row="1"
DisplayMemberPath="c_brand"
Margin="20,13,17,15"
VerticalAlignment="Center" Height="30">
<ComboBox.SelectedItem>
<Binding Path="SelectedBrand"
BindsDirectlyToSource="True"
Mode="OneWayToSource" />
</ComboBox.SelectedItem>
</ComboBox>
来自 Model-ComboBox 的代码:
<!--CarModel ComboBox-->
<ComboBox x:Name="carModel" Style="{StaticResource combobox}" Grid.Column="1"
Margin="20,15,17,14"
ItemsSource="{Binding ModelSelectedBrand}" DisplayMemberPath="c_model"
Grid.Row="2" VerticalAlignment="Center" Height="30">
</ComboBox>
来自 VMClass 的代码:
public string selectedBrand;
public string SelectedBrand
{
get { return selectedBrand; }
set
{
selectedBrand = value;
PropertyChanged(this, new PropertyChangedEventArgs
("ModelSelectedBrand"));
}
}
public IEnumerable<c_car> ModelSelectedBrand
{
get
{
return (from c in db.c_car
where c.c_brand.Equals(SelectedBrand) //THIS IS CAUSING PROBLEMS
select c).GroupBy(x=>x.c_model).Select(x=>x.FirstOrDefault()).OrderBy(x=>x.c_model).ToList();
}
}
当我在Linq语句中注释 WHERE 子句时,我得到了这个结果: click here
这些全部汽车型号。
我认为问题在于我的&#34; SelectedBrand &#34;物业不会从 carBrand-ComboBox
获得任何价值因此,我想问你,是否有人知道可能导致麻烦的原因。
答案 0 :(得分:2)
您的汽车品牌ComboBox
目前正在将c.car
的班级名称传递给您的查询。如果您绑定到SelectedValue
而不是SelectedItem
,并将SelectedValuePath
设置为"c_car"
则可以正常工作。
所以你的新CarBrand ComboBox定义将是
<!--CarBrand Combobox-->
<ComboBox x:Name="carBrand" Style="{StaticResource combobox}"
ItemsSource="{Binding AllCars}"
Grid.Column="1" Grid.Row="1"
DisplayMemberPath="c_brand"
SelectedValuePath="c_brand"
Margin="20,13,17,15"
VerticalAlignment="Center" Height="30">
<ComboBox.SelectedValue>
<Binding Path="SelectedBrand"
BindsDirectlyToSource="True"
Mode="OneWayToSource" />
</ComboBox.SelectedValue>
</ComboBox>