想象一下,我有一个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/

10-13 08:08