Как передать параметр в синглтон в MVVM Xamarin Forms - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу добавить элемент в ObservableCollection из другой ViewModel ... проблема заключается в том, что при создании экземпляра этой ViewModel через синглтон я получаю сообщение об ошибке, что конструктор получает параметр

Не приводятся аргументы, соответствующие требуемому формальному параметру 'centroLegado' для 'GenerarRetiroCentroViewModel.GenerarRetiroCentroViewModel (CentroGeneracion)' *

Singleton

КакМогу ли я реализовать синглтон, чтобы я мог вызывать его из другой ViewModel?

Я прилагаю код ViewModel, который имеет Observable Collection и конструктор ..

GenerarRetiroCentroViewModel.CS:

 #region Constructor
  public GenerarRetiroCentroViewModel(CentroGeneracion centroLegado)
  {
      instance = this;   

      ListaResiduosTemporales = new ObservableCollection<ResiduosTemporal>();

      centroSeleccionado = centroLegado;

 }    
 #endregion

 #region Singleton
  static GenerarRetiroCentroViewModel instance;

  public static  GenerarRetiroCentroViewModel GetInstance()
  {
      if (instance == null)
      {
          return new GenerarRetiroCentroViewModel();
      }
      return instance;
 }
 #endregion

Я прилагаю код того, как я «хочу» вызвать мою ObservableCollection из другой ViewModel (SelectResiduoViewModel.CS)

SeleccionarResiduoViewModel.CS:

           var objeto = new ResiduosTemporal
            {
                IdResiduo = IdResiduo,
                NombreResiduo = NombreResiduo,
                IdEstimado = IdUnidad,
                NombreEstimado = NombreUnidad,
                IdContenedor = IdContenedor,
                NombreContenedor = NombreContenedor,

            };

            var generarRetiroCentroViewModel = GenerarRetiroCentroViewModel.GetInstance();

            generarRetiroViewModel.ListaResiduosTemporales.Add(objecto);

Какя могу добавить объект Mode, чтобы заполнить элемент управления, который находится в другой ViewModel?Это возможно с SINGLETON?как мне это сделать?любая помощь для меня?

1 Ответ

0 голосов
/ 28 февраля 2019

(Я действительно забыл дать ответ. Извините ¯ \ _ (ツ) _ / ¯)

Как объяснено в моем комментарии, вы просто должны правильно заполнить параметр.Вы ожидаете CentroGeneracion, но не передаете никаких аргументов.Если вам это не нужно, создайте второй пустой конструктор.

Кроме того, вы никогда не назначаете свойство экземпляра, это означает, что вы всегда будете возвращать новый экземпляр singleton, если будете вызывать эту функцию.Это должно быть

public GenerarRetiroCentroViewModel GetInstance()
{
    if(instance == null){
        instance = new GenerarRetiroCentroViewModel();
    }

    return instance;
}

На самом деле, вам даже не нужна функция.

public GenerarRetiroCentroViewModel Instance
{
    get
    {
        if(instance == null){
            instance = new GenerarRetiroCentroViewModel();
        }

        return instance;
    }
}

Примечание.Если вы хотите сделать его поточно-ориентированным, вы можете использовать Lazy (.NET 4 +).

public sealed class SingletonClass
{
    private static readonly Lazy<SingletonClass> _lazy =  new Lazy<SingletonClass>(() => new SingletonClass());

    public static SingletonClass Instance 
    {
        get
        {
            return _lazy.Value;
        }
    }

}

Он в основном создает Singleton при первом обращении к этому свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...