【发布时间】:2020-02-20 12:23:13
【问题描述】:
我正在尝试从第三个Class 访问通过另一个Class 访问的Class 中的string。
在这种情况下,SelectedCar 是 ListView 中的 SelectedItem
&
SelectedModel 是 ListView 中的 SelectedItem
汽车
public class Car : ViewModelBase
{
private string _name;
private ObservableCollection<CarModel> _models;
public Car()
{
}
public Car(string name, ObservableCollection<CarModel> models)
{
Name = name;
Models = models;
}
public Car(string name)
{
Name = name;
}
public static Car Create(string name, ObservableCollection<CarModel> models)
=> new Car(name, models);
public static Car Create(string name)
=> new Car(name);
public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
public ObservableCollection<CarModel> Models
{
get => _models;
set => SetProperty(ref _models, value);
}
}
汽车视图模型
public class CarViewModel : ViewModelBase, ICarViewModel
{
private string _enteredModel;
private string _enteredCar;
private Car _selectedCar;
private CarModel _selectedModel;
private ObservableCollection<CarModel> _carModels;
private ObservableCollection<Car> _cars;
[DesignOnly(true)]
public CarViewModel()
{
Cars = new ObservableCollection<Car>
{
Car.Create("Audi",
new ObservableCollection<CarModel>()
{
CarModel.Create("A1"),
CarModel.Create("A2"),
CarModel.Create("A3"),
CarModel.Create("A4"),
CarModel.Create("A5")
}),
Car.Create("Mercedes",
new ObservableCollection<CarModel>()
{
CarModel.Create("A-Class"),
CarModel.Create("B-Class"),
CarModel.Create("C-Class"),
CarModel.Create("E-Class"),
CarModel.Create("S-Class")
}),
Car.Create("BMW",
new ObservableCollection<CarModel>()
{
CarModel.Create("1-Serie"),
CarModel.Create("2-Serie"),
CarModel.Create("3-Serie"),
CarModel.Create("4-Serie"),
CarModel.Create("5-Serie")
}),
Car.Create("Volkswagen",
new ObservableCollection<CarModel>()
{
CarModel.Create("Golf"),
CarModel.Create("Passat"),
CarModel.Create("Arteon"),
CarModel.Create("T-Cross"),
CarModel.Create("Up!")
}),
Car.Create("Volvo",
new ObservableCollection<CarModel>()
{
CarModel.Create("V60"),
CarModel.Create("V70"),
CarModel.Create("XC60"),
CarModel.Create("XC90"),
CarModel.Create("S90")
}),
};
DeleteModelCommand = new DelegateCommand(DeleteModelExecuted, DeleteModelCanExecute);
DeleteCarCommand = new DelegateCommand(DeleteCarExecuted, DeleteCarCanExecute);
AddCarCommand = new DelegateCommand(AddCarExecuted, AddCarCanExecute);
AddModelCommand = new DelegateCommand(AddModelExecuted, AddModelCanExecute);
}
public string EnteredModel
{
get => _enteredModel;
set => SetProperty(ref _enteredModel, value);
}
public string EnteredCar
{
get => _enteredCar;
set => SetProperty(ref _enteredCar, value);
}
public Car SelectedCar
{
get => _selectedCar;
set => SetProperty(ref _selectedCar, value);
}
public CarModel SelectedModel
{
get => _selectedModel;
set => SetProperty(ref _selectedModel, value);
}
public ObservableCollection<Car> Cars
{
get => _cars;
set => SetProperty(ref _cars, value);
}
public ObservableCollection<CarModel> CarModels
{
get => _carModels;
set => SetProperty(ref _carModels, value);
}
}
CarModifierViewModel
public class CarModifierViewModel : ViewModelBase, ICarModifierViewModel
{
private CarColorModel _selectedColor;
private CarModifierModel _selectedYear;
private string _previouslySelectedCar;
private string _previouslySelectedModel;
private ObservableCollection<CarModifierModel> _modifierModels;
private CarViewModel _carViewModelClass;
[DesignOnly(true)]
public CarModifierViewModel()
{
ModifierModels = new ObservableCollection<CarModifierModel>
{
CarModifierModel.Create(2000, new ObservableCollection<CarColorModel>()
{
CarColorModel.Create("Silver"),
CarColorModel.Create("Black")
}),
CarModifierModel.Create(2005, new ObservableCollection<CarColorModel>()
{
CarColorModel.Create("Silver"),
CarColorModel.Create("Black"),
CarColorModel.Create("White")
}),
CarModifierModel.Create(2010, new ObservableCollection<CarColorModel>()
{
CarColorModel.Create("Silver"),
CarColorModel.Create("Black"),
CarColorModel.Create("White"),
CarColorModel.Create("Blue")
}),
CarModifierModel.Create(2015, new ObservableCollection<CarColorModel>()
{
CarColorModel.Create("Silver"),
CarColorModel.Create("Black"),
CarColorModel.Create("White"),
CarColorModel.Create("Blue"),
CarColorModel.Create("Red")
}),
CarModifierModel.Create(2020, new ObservableCollection<CarColorModel>()
{
CarColorModel.Create("Silver"),
CarColorModel.Create("Black"),
CarColorModel.Create("White"),
CarColorModel.Create("Blue"),
CarColorModel.Create("Red"),
CarColorModel.Create("Purple")
})
};
}
public CarColorModel SelectedColor
{
get => _selectedColor;
set => SetProperty(ref _selectedColor, value);
}
public CarModifierModel SelectedYear
{
get => _selectedYear;
set
{
SetProperty(ref _selectedYear, value);
LoadCarAndModel();
}
}
public string PreviouslySelectedCar
{
get => _previouslySelectedCar;
set => SetProperty(ref _previouslySelectedCar, value);
}
public string PreviouslySelectedModel
{
get => _previouslySelectedModel;
set => SetProperty(ref _previouslySelectedModel, value);
}
public ObservableCollection<CarModifierModel> ModifierModels
{
get => _modifierModels;
set => SetProperty(ref _modifierModels, value);
}
public CarViewModel CarViewModelClass
{
get => _carViewModelClass;
set => SetProperty(ref _carViewModelClass, value);
}
public void LoadCarAndModel()
{
CarViewModelClass = new CarViewModel();
CarViewModelClass.SelectedCar = new Car();
CarViewModelClass.SelectedCar.Name = new string(CarViewModelClass.SelectedCar.Name);
PreviouslySelectedCar = CarViewModelClass?.SelectedCar?.Name;
PreviouslySelectedModel = CarViewModelClass.SelectedModel.Name;
}
}
我希望我没有错过任何重要的信息,但是如何从另一个视图访问 SelectedItem?在CarModifierViewModel 中,我尝试实例化要访问的类,但它没有加载 SelectedItem..
【问题讨论】:
-
你必须使用合成。您的问题一目了然。所以给你一个具体的解决方案并不容易,例如,组合类的关系。请澄清哪个类正在修改哪个类?
-
截图对我来说相当混乱。请简明扼要地描述问题是什么以及您要实现的目标以及包括任何支持代码。
-
@BionicCode 我会查找作文。 Car.cs 有一个
string Name,这是在 CarViewModel.cs 中设置的。我想从 CarModifierViewModel.cs 访问它。 -
@ColinM 该应用程序的屏幕截图显示了我想要访问的
selectedItem绑定。我正在尝试在第二个视图中访问选定的汽车和选定的模型。其中有 CarModifierViewModel 作为数据上下文。第一个视图有数据上下文 CarViewModel -
我可以读到类似:
PreviouslySelectedCar = CarViewModelClass?.SelectedCar?.Name;这正是您要问的,不是吗?