通过在列表框中选择并打开新的 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
我有一个可观察的集合 "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