2013-12-22 38 views
0

我有一個列表視圖與「汽車總動員」和其組合框顯示「氣」列表視圖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類中,但它是自動生成的類,所以我認爲這不是好方法。

希望你能幫助我:)

+1

這只是一個參考。 (Gas g in tempList)GasList.Add(g);每輛車都需要新的。 – Paparazzi

+0

感謝您的回答,但我在這裏看不到您的意思? – anthoLB29

+0

向Gas添加Gas氣體。 (Gas g in tempList)GasList.Add(new Gas(g)); – Paparazzi

回答

0

在那答案

情況下,這只是一個參考。

foreach (Gas g in tempList) GasList.Add(g); 

需要爲每輛車新的。

向天然氣添加天然氣。

foreach (Gas g in tempList) GasList.Add(new Gas(g)); 
相關問題