通过在列表框中选择并打开新的 window 来编辑 observableCollection 中的对象。 wpf C#

edit object in observableCollection by selecting in listbox and opening new window to edit it . wpf c#

我有一个可观察的集合 "vehicles" 包含 class "car" "bike" 或 "van" 的车辆,每个都继承自“车辆 Class,

public ObservableCollection<Vehicle> vehicles = new ObservableCollection<Vehicle>();

Car car3 = new Car("Volkswagon", "Golf", "8000", "Red", "2000", "300000", "not so bad", "1.5litre", Car.BodyType.Hatchback);
            Car car4 = new Car("Audi", "A6", "19000", "Red", "20014", "20000", "hannnnndy", "2litre", Car.BodyType.Saloon);

            vehicles.Add(car1);
            vehicles.Add(car2);
            vehicles.Add(car3);
            vehicles.Add(car4);

            Van van1 = new Van("Ford", "transit", "25000", "white", "2008", "100000", "lovely red car", "1.4litre", Van.WheelBase.Medium, Van.VanType.Unlisted);
            Van van2 = new Van("Citroen", "berlingo", "2000", "silver", "2006", "20100", "lovely", "1.4litre", Van.WheelBase.Long, Van.VanType.PanelVan);

这些车辆显示在列表框中 "lbxVehicles"

lbxVehicles.ItemsSource = vehicles;

我需要能够 select 在列表框中显示其中一辆车,当我单击编辑按钮时,打开一个新的 window 并编辑详细信息,当我单击新 window 上的按钮将编辑可观察集合中的 selected 对象。我想做的是。 第一个window:

    private void Button_ClickEdit(object sender, RoutedEventArgs e)
            {
                Vehicle selVehicle = lbxVehicles.SelectedItem as Vehicle;
                if (selVehicle != null)
                {
                    WindowEdit winE = new WindowEdit();
                    winE.Owner = this;
                    winE.edit = selVehicle;
                    winE.ShowDialog();
                }
            }

然后 window 2:

public partial class WindowEdit : Window
    {
        public object edit = new object();
        public WindowEdit()
        {
            InitializeComponent();
        }

这正是我尝试过的方法,但我很确定这是错误的。非常感谢任何帮助,因为我正在努力学习尽可能多的东西,如果你能解释任何可能的解决方案,那就太好了

你很接近。 您需要设置的是第二个 window 的 DataContext 作为车辆的实例。这样,您可以使用 Vehicle class 的属性编辑所有属性。

请注意 class Vehicle 需要继承 INotifyPropertyChanged 才能正常工作,并且您需要使用 NotifyPropertyChanged 每次你在 Vehicle 上设置一个值 属性。

这里有一些关于 MVVM 模式的指导:

http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explained