我有一個列表視圖與「汽車總動員」和其組合框顯示「氣」列表視圖SelectedCar的:組合框的SelectedValue改變所有項目的屬性
<ListView ItemsSource="{Binding CarList}" SelectedItem="{Binding SelectedCar}" />
<ComboBox ItemsSource="{Binding GasList}"
DisplayMemberPath="Name"
SelectedValue="{Binding SelectedCar.Gas.ID}"
SelectedValuePath="ID"/>
我MainViewModel管理「卡洛斯」和「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);
}
}
我CarViewModel(這是從我的窗口中調用)從MainViewModel衍生和管理 」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);
}
}
我用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; }
}
好吧,當我在我的列表視圖中選擇一輛車,組合框顯示汽車的氣體名稱。 問題是當我更改組合框中的值時,所有具有相同氣體的汽車都會更新。
這裏是一個例子:
我有2輛汽車具有相同的氣體價值(「氣」)。
我在我的listView中選擇第一個,並更改組合框值(以「diesel」爲例)。
然後,如果我在列表視圖中選擇第二個,組合框也顯示「柴油」。
據我所知,我的組合框只是改變氣體的ID而不是SelectedCar.Gas的ID,所以問題來自這裏(我猜)。
我嘗試了很多東西,例如在我的組合框中將SelectedItem替換爲SelectedValue,如果我的override the equals method在我的poco代理Gas類中,但它是自動生成的類,所以我認爲這不是好方法。
希望你能幫助我:)
這只是一個參考。 (Gas g in tempList)GasList.Add(g);每輛車都需要新的。 – Paparazzi
感謝您的回答,但我在這裏看不到您的意思? – anthoLB29
向Gas添加Gas氣體。 (Gas g in tempList)GasList.Add(new Gas(g)); – Paparazzi