【问题标题】:Combobox selectedValue change all items properties组合框 selectedValue 更改所有项目属性
【发布时间】:2013-12-22 15:41:33
【问题描述】:

我有一个带有“汽车”的列表视图和一个显示列表视图 SelectedCar 的“气体”的组合框:

<ListView ItemsSource="{Binding CarList}" SelectedItem="{Binding SelectedCar}" />
<ComboBox ItemsSource="{Binding GasList}"
             DisplayMemberPath="Name"
             SelectedValue="{Binding SelectedCar.Gas.ID}"
             SelectedValuePath="ID"/>

我的 MainViewModel 管理“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);

    }
}

我的 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”)。
然后,如果我在列表视图中选择第二个,组合框也会显示“柴油”。

据我所知,我的组合框只是更改了 Gas 的 ID,而不是 SelectedCar.Gas 的 ID,所以问题来自这里(我猜)。

我尝试了很多事情,比如在我的组合框中用“SelectedItem”替换“SelectedValue”,如果我在我的 poco 代理 Gas 类中 override the equals method 它可以工作,但它是一个自动生成的类,所以我认为这不是好方法.

希望你能帮助我:)

【问题讨论】:

  • 这只是一个参考。 foreach (tempList 中的气体 g) GasList.Add(g);每辆车都需要新车。
  • 感谢您的回答,但我不明白您的意思?
  • 向 Gas 添加一个 Gas ctor。 foreach (tempList 中的 Gas g) GasList.Add(new Gas(g));
  • 我试过了,但没有任何改变
  • 好的,就是这样:) thx

标签: c# wpf entity-framework data-binding mvvm


【解决方案1】:

如果这就是答案

这只是一个参考。

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

每辆车都需要新的。

为 Gas 添加一个 Gas ctor。

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

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2011-08-17
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多