C# 组合框selectedValue更改所有项目属性
我有一个带有“Cars”的listview和一个显示listview所选汽车“Gas”的组合框:C# 组合框selectedValue更改所有项目属性,c#,wpf,entity-framework,data-binding,mvvm,C#,Wpf,Entity Framework,Data Binding,Mvvm,我有一个带有“Cars”的listview和一个显示listview所选汽车“Gas”的组合框: <ListView ItemsSource="{Binding CarList}" SelectedItem="{Binding SelectedCar}" /> <ComboBox ItemsSource="{Binding GasList}" DisplayMemberPath="Name" SelectedValue="{B
<ListView ItemsSource="{Binding CarList}" SelectedItem="{Binding SelectedCar}" />
<ComboBox ItemsSource="{Binding GasList}"
DisplayMemberPath="Name"
SelectedValue="{Binding SelectedCar.Gas.ID}"
SelectedValuePath="ID"/>
My Main ViewModel管理“CarList”和“SelectedCar”属性:
public class MainViewModel : ViewModelBase
{
public ObservableCollection<Car> CarList { get; set; }
private Car selectedCar;
public Car SelectedCar
{
get { return selectedCar; }
set
{
if (selectedCar != value)
{
selectedCar = value;
RaisePropertyChanged("SelectedCar");
}
}
}
public MainViewModel()
{
IList<Car> tempList;
using (var ctx = new CarDBFirstEntities())
{
var car = ctx.Cars
.Include("Gas")
.ToList();
tempList = (IList<Car>)car;
}
CarList = new ObservableCollection<Car>();
//Convert LINQ list to ObservableCollection
foreach (Car c in tempList)
CarList.Add(v);
}
}
public类MainViewModel:ViewModelBase
{
公共可观测集合CarList{get;set;}
私家车选择私家车;
公共汽车
{
获取{return selectedCar;}
设置
{
如果(selectedCar!=值)
{
selectedCar=值;
RaisePropertyChanged(“选定车辆”);
}
}
}
公共主视图模型()
{
圣殿骑士团;
使用(var ctx=new CarDBFirstEntities())
{
var car=ctx.Cars
.包括(“天然气”)
.ToList();
圣殿骑士=(IList)汽车;
}
CarList=新的可观测集合();
//将LINQ列表转换为ObservableCollection
foreach(圣殿骑士中的c车)
添加(v);
}
}
我的CarViewModel(从我的窗口调用)源自MainViewModel和manage“GasList”属性:
public class CarViewModel : MainViewModel
{
public ObservableCollection<Gas> GasList { get; set; }
public CarViewModel()
{
IList<Gas> tempList;
using (var ctx = new CarDBFirstEntities())
{
var gas = ctx.Gas.ToList();
tempList = (IList<Gas>)gas;
}
GasList = new ObservableCollection<Gas>();
//Convert LINQ list to ObservableCollection
foreach (Gas g in tempList)
GasList.Add(g);
}
}
public类CarViewModel:MainViewModel
{
公共ObservableCollection气体列表{get;set;}
公共汽车视图模型()
{
圣殿骑士团;
使用(var ctx=new CarDBFirstEntities())
{
var gas=ctx.gas.ToList();
圣殿骑士=(IList)气体;
}
GasList=新的ObservableCollection();
//将LINQ列表转换为ObservableCollection
foreach(圣殿骑士中的气体g)
气体清单。添加(g);
}
}
我使用EF 6,因此以下是我自动生成的poco代理类:
public partial class Car
{
...
public Nullable<int> GasID { get; set; }
...
public virtual Gas Gas{ get; set; }
}
public partial class Gas
{
public Gas()
{
this.Car = new HashSet<Car>();
}
public int ID { get; set; }
public string Name { get; set; }
...
public virtual ICollection<Car> Cars { get; set; }
}
公共部分等级车
{
...
公共可空GasID{get;set;}
...
公共虚拟气体{get;set;}
}
公共部分类气体
{
公共气体()
{
this.Car=新的HashSet();
}
公共int ID{get;set;}
公共字符串名称{get;set;}
...
公共虚拟ICollection Cars{get;set;}
}
嗯,当我在列表视图中选择一辆车时,组合框会显示该车的汽油名称。
问题是,当我更改组合框中的值时,所有具有相同汽油的汽车都会更新。下面是一个例子:
我有两辆车的汽油值相同(“汽油”)。
我在listView中选择第一个并更改combobox值(例如改为“diesel”。
然后,如果我在listview中选择第二个,组合框也会显示“diesel” 正如我所理解的,我的组合框只是改变了汽油的ID,而不是所选汽车的ID。汽油,所以问题就从这里来了(我猜) 我尝试了很多方法,比如在我的组合框中用“SelectedValue”替换“SelectedValue”,如果我在我的poco代理气体类中,它会工作,但它是一个自动生成的类,所以我认为这不是一个好方法
希望你能帮助我:)如果这是答案的话 这只是一个参考
foreach (Gas g in tempList) GasList.Add(g);
每辆车都需要换新的
向气体中添加气体检测器
foreach (Gas g in tempList) GasList.Add(new Gas(g));
这只是一个参考。foreach(圣堂武士中的气体g)气体列表。添加(g);每辆车都需要新的。谢谢你的回答,但我不明白你的意思。给汽油加一个汽油机。foreach(圣堂武士中的气体g)气体列表。添加(新气体(g));我试过了,但没什么改变。就是这样:)谢谢