想象一下,我有一个UserControl可以显示一个 parking 场(我最喜欢的类比),其中有不同颜色的汽车。您可以选择一辆汽车,并在单独的UserControl(在单独的项目中)中显示所选汽车的统计信息。
现在,用户希望在汽车统计信息UC上找到一个按钮,“下一个相同颜色的汽车”。选择后,它应以相同的颜色显示 parking 场上下一辆汽车的统计数据(从上到下,从左到右)。
因此,如果这有道理,就继续讨论这个问题。
我目前正在使用MVVM Lite从 parking 场UC向汽车统计信息UC发送包含所选汽车的消息。一切都很好。现在,尽管有了这个新功能请求,我该怎么办?统计UC需要从 parking 场UC请求下一辆车。
这是使用依赖注入(inject)的好地方吗?还是还有另一种更好的方法?
最佳答案
如果我说对了,那么您想要的是带有适当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
关于wpf - ViewModel通讯问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2241324/