Xamarin - Как передать переменную в viewmodel - PullRequest
1 голос
/ 19 марта 2020

У меня 2 просмотра. У одного есть событие, которое передает две переменные на вторую страницу и загружает страницу вверх:

private void CollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var item = (GalleryListEntry)e.CurrentSelection.FirstOrDefault();
        Navigation.PushModalAsync(new Gallery(item.PhotographerCode, item.GalleryCode));
    }

на второй странице У меня есть это:

public Gallery(string photographerCode, string galleryCode)
    {
        InitializeComponent();
    }

Вторая страница, имеет представление Collection, имеющее собственный источник Bindings. Для этого источника привязки у меня есть Модель, Сервис и ViewModel. Служба вызывается моделью представления и возвращает список изображений, которые должны отображаться в представлении коллекции второй страницы.

Внутри этого класса обслуживания мне потребуется доступ к двум переданным выше переменным (photograperCode и galleryCode), но я не могу понять, как передать переменные в ViewModel, чтобы затем переслать его в класс.

ViewModel:

using GalShare.Model;
using GalShare.Service;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;

namespace GalShare.ViewModel
{
    class GalleryViewModel
    {
        public ObservableCollection<Gallery> Galleries { get; set; }
        public GalleryViewModel()
        {
        Galleries = new GalleryService().GetImageList();
        }
    }
}

Я пытался вот так

        ((GalleryViewModel)this.BindingContext).pCode = photographerCode;
        ((GalleryViewModel)this.BindingContext).gCode = galleryCode;

но я получаю эту ошибку: System.NullReferenceException: 'Object reference not set to an instance of an object.' BindingContext имеет значение Null, но в файле Xaml у меня есть это:

<ContentPage.BindingContext>
    <vm:GalleryViewModel/>
</ContentPage.BindingContext>

1 Ответ

1 голос
/ 19 марта 2020

Это должно работать нормально. Сначала в вашем Gallery

public Gallery(string photographerCode, string galleryCode)
{
  InitializeComponent();
  BindingContext = new GalleryViewModel(photographerCode, galleryCode);
}

А теперь во ViewModel

class GalleryViewModel
{
  public ObservableCollection<Gallery> Galleries { get; set; }
  public GalleryViewModel(string pCode, string gCode)
  {
    this.pCode = pCode;
    this.gCode = gCode;
    Galleries = new GalleryService().GetImageList();
  }
}
...