ViewModel вопрос связи - PullRequest
       18

ViewModel вопрос связи

2 голосов
/ 11 февраля 2010

Представьте, что у меня есть UserControl, который показывает парковку (моя любимая аналогия) с автомобилями разных цветов. Вы можете выбрать автомобиль, и в отдельном UserControl (в отдельном проекте) отображается статистика выбранного автомобиля.

Теперь пользователь хочет нажать на кнопку UC статистики автомобиля «Следующая машина того же цвета». При выборе этого параметра должна отображаться статистика следующего автомобиля (сверху вниз, слева направо) на стоянке того же цвета.

Так что, если это имеет смысл, перейдем к вопросу.

В настоящее время я использую MVVM Lite для отправки сообщения, содержащего выбранный автомобиль, с парковки UC на UC статистики автомобилей. Все хорошо. Теперь, с этим новым запросом, что мне делать? Статистика UC должна запросить следующую машину с парковки UC.

Будет ли это хорошим местом для использования внедрения зависимостей? Или есть другой лучший подход?

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Если я вас правильно понял, вам нужна команда с соответствующими CommandParameters.

  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}", теперь вы получили контроль над классом viewmodel ParkingLot, найдите автомобиль следующего цвета и снова установите для него свойство SelectedCar. Я предполагаю, что у вас будет RaisepropertyChanged во всех этих свойствах. Я использую простой DelegateCommand of Prism

0 голосов
/ 14 февраля 2010

Я бы использовал контроллер в качестве посредника между двумя ViewModel (ParkingLotViewModel и StatisticsViewModel). В вашем случае контроллер должен синхронизировать выбранный автомобиль и передать команду «Выбрать следующий автомобиль того же цвета» в ParkingLotViewModel.

Примеры приложений WPF Application Framework (WAF) показывают, как это может работать.

.

JBE

...