ViewModel通信问题

时间:2010-02-11 00:08:57

标签: wpf mvvm unity-container viewmodel mef

想象一下,我有一个UserControl,用不同颜色的汽车显示停车场(我最喜欢的比喻)。您可以选择汽车,并在单独的UserControl中(在单独的项目中)显示所选汽车的统计数据。

现在用户想要一个汽车统计UC按钮,'下一辆同色的车'。选中后,它应显示停车场上下一辆车的统计数据(从上到下,从左到右)。

因此,如果这是有意义的,那么就是问题。

我目前正在使用MVVM Lite将包含所选汽车的消息从停车场UC发送到汽车统计UC。一切都很好。现在,通过这个新的功能请求,我该怎么办?统计UC需要从停车场UC请求下一辆车。

这是一个使用依赖注入的好地方吗?还是有另一种更好的方法吗?

2 个答案:

答案 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