Лучший способ передать данные в новую ViewModel, когда она инициируется

Я работаю над приложением базы данных WPF, используя MVVM-Light Framework. Я использую SimpleIOC для внедрения моих Data Services, и мои ViewModels подключены к представлению из файла XAML. Однако при открытии новых моделей просмотра мне обычно также необходимо передать другой объект в модель представления (скажем, я передаю целое число CarId, чтобы я мог получить фактический автомобиль из базы данных).

Прямо сейчас я передаю это с помощью мессенджера в представлении после InitializeComponent (). Это тогда поймано моделью Представления. В настоящее время это работает, однако у него есть некоторые недостатки.

Во-первых, сообщение не отправляется до тех пор, пока не будет вызван конструктор модели представления. Допустим, у меня было свойство объекта ThisCar в ViewModel, и у меня были вторичные свойства, такие как строка с именем Brand, которая возвращает ThisCar.Brand.

    public const string ThisPersonPropertyName = "ThisCar";
    private Model.Car _thisCar;
    public Model.Car ThisCar
    {
        get
        {
            return _thisCar;
        }

        set
        {
            if (_thisCar== value)
            {
                return;
            }

            RaisePropertyChanging(ThisCarPropertyName);
            _thisCar= value;
            RaisePropertyChanged(ThisCarPropertyName);
        }
    }

    public const string BrandPropertyName = "Brand";
    public string Brand
    {
        get
        {
            return ThisCar.Brand;
        }

        set
        {
            if (ThisCar.Brand == value)
            {
                return;
            }

            RaisePropertyChanging(BrandPropertyName);
            ThisCar.Brand = value;
            RaisePropertyChanged(BrandPropertyName);
        }
    }

Теперь, когда вызывается конструктор, я должен инициализировать ThisCar в конструкторе модели представления. Таким образом, в противном случае я получаю нулевую ошибку на ThisCar.Brand при создании ViewModel.

ThisCar = new CarObject();

Затем, после инициализации пустого объекта, будет вызвано Сообщение, и я вытащу реальный Автомобиль из базы данных на основе идентификатора автомобиля.

ThisCar = webService.GetCar(carId);

Однако, когда я делаю это, свойство бренда не обновляется, потому что ничто не вызывает OnPropertyChanged для бренда.

У меня есть два обходных пути, но они больше походят на меня. Сначала включается OnPropertyChanged вручную для любых свойств, которые необходимо обновить. Во-вторых, я удаляю все небольшие свойства и привязываю все непосредственно к свойству ThisCar (что означает, что я должен реализовать INotifyPropertyChanged в моей модели).

Пожалуйста, дайте мне знать, если я просто привередлив, или есть лучший способ сделать это. То, как я это делаю, работает, но просто нене сидеть рядом со мной. Спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос