想象一下,我有一个UserControl,用不同颜色的汽车显示停车场(我最喜欢的比喻)。您可以选择汽车,并在单独的UserControl中(在单独的项目中)显示所选汽车的统计数据。
现在用户想要一个汽车统计UC按钮,'下一辆同色的车'。选中后,它应显示停车场上下一辆车的统计数据(从上到下,从左到右)。
因此,如果这是有意义的,那么就是问题。
我目前正在使用MVVM Lite将包含所选汽车的消息从停车场UC发送到汽车统计UC。一切都很好。现在,通过这个新的功能请求,我该怎么办?统计UC需要从停车场UC请求下一辆车。
这是一个使用依赖注入的好地方吗?还是有另一种更好的方法吗?
答案 0 :(得分:1)
如果我找对你,你想要的是一个带有适当CommandParameters的Command。
public class Car
{
public Car(ParkingLot lot)
{
_parkingLot = lot;
}
public string Color { get; set; }
public ParkingLot ParkingLot
{
get
{
return _parkingLot;
}
}
private ParkingLot _parkingLot;
}
public class ParkingLot : ObservableCollection<Car>
{
public Car SelectedCar { get; set; }
public ICommand ShowNextCarCommand {
get
{
if (_showNextCar == null)
{
_showNextCar = new DelegateCommand(OnShowNextCar);
}
return _showNextCar;
}
}
private void OnShowNextCar()
{
string currentColor = SelectedCar.Color;
//Write proper logic to get the next Car. Here you got the currently selected car with you and the color
SelectedCar = this.NEXT(s => s.Color == currentColor); //Write the NEXT() logic
}
ICommand _showNextCar;
}
现在设置Button.Command =“{Binding ParkingLot.ShowNextCarCommand}”,现在您可以控制ParkingLot viewmodel类并找到Next相同颜色的汽车并再次将其设置为SelectedCar属性。我假设您将在所有这些属性中使用RaisepropertyChanged。我使用Prism的简单DelegateCommand
答案 1 :(得分:0)
我会使用Controller作为两个ViewModel(ParkingLotViewModel和StatisticsViewModel)之间的中介。在您的情况下,Controller负责同步所选择的汽车,并负责将“选择下一辆相同颜色的汽车”命令传递给ParkingLotViewModel。
WPF Application Framework (WAF) 的示例应用程序展示了它的工作原理。
JBE