Инициализируйте объект и поделитесь им между модулями - PullRequest
1 голос
/ 20 мая 2019

У меня есть несколько модулей (каждый модуль имеет свой собственный проект), и я пытаюсь разделить объект между каждым модулем.

Объект инициализирован в модуле UserViewModel, но не в других модулях (только после изменения свойства триггера). Я попробовал это с EventAggregator, но это не совсем правильно. Я скучаю по чему-то очень важному здесь.

public UserClass User
{
    get { return _user; }
    set { SetProperty(ref _user, value);}
}

    First Module

 public UserViewModel(IEventAggregator userEventAggregator, 
  UnityContainer container)
{
   _userEventAggregator= userEventAggregator;
   _userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
   User.PropertyChanged += UserOnPropertyChanged;
}

 private void UserOnPropertyChanged(object sender, 
  PropertyChangedEventArgs e)
  {
     _userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
  }

Second Module
public UserDetailsViewModel(IEventAggregator userEventAggregator, 
 IUnityContainer container)
  {
    _userEventAggregator= userEventAggregator;   
    _userEventAggregator.GetEvent<UserSentEvent>).Subscribe(UserUpdate);
  }

1 Ответ

0 голосов
/ 21 мая 2019

Объект пользователя внутри UserViewModel инициализирован, но не в UserDetailsViewModel (он создает свой собственный объект)

Это неправильный способ действий, не модель представления создает модель, а модель представления создается из модели. Вам нужна общая служба, доступная из обеих ваших моделей представлений, и эта служба управляет моделью.

Пример:

internal class SimpleInMemoryUserRepository : IUserRepository
{
    public User GetTheUser()
    {
        return _user;
    }

    public void DeleteTheUser()
    {
        _user = null;
    }

    public void CreateNewUser()
    {
        _user = new User();
    }

    private User _user;
}

А в вашем коде инициализации:

container.RegisterSingleton<IUserRepository, SimpleInMemoryUserRepository>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...