Формы Xamarin. Передать параметр ViewModel конвертеру

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

Это xaml-файл:

<ContentPage.Resources>
    <ResourceDictionary>
        <converter:IsLastItemConverter x:Key="lastItemConverter" Collection="{Binding Selfies}" />
    </ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
    ....
    <local:Selfie IsLastItem="{Binding ID, Converter={StaticResource lastItemConverter}}" />
    ....
</ContentPage.Content>

Это код xaml.cs позади

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SelfieWall : BaseContentPage
{
    public SelfieWall()
    {
        InitializeComponent();
        this.BindingContext = new SelfieWallViewModel();
    }
}

Это ViewModel

public class SelfieWallViewModel : INotifyPropertyChanged
{
   ....
   public List<Model.Selfie> Selfies { get; set; }
   ....
}

это преобразователь

public class IsLastItemConverter : IValueConverter
{
    public List<Selfie> Collection { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return true;
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        return true;
    }
}

Когда я пытаюсь загрузить представление, определенное в приведенном выше xaml, я получаю сообщение об ошибке

System.NullReferenceException: Object reference not set to an instance of an object.

Ошибка исчезает, если я удаляю

Collection="{Binding Selfies}"

из XAML.

Любые подсказки о том, как передать переменную ViewModel в конвертер.


person giani.sim    schedule 11.07.2017    source источник
comment
developer.xamarin.com/guides/xamarin-forms /xaml/xaml-основы/   -  person Alessandro Caliaro    schedule 11.07.2017
comment
Я прочитал эту ссылку, но там нет упоминания о том, как привязать модель представления к конвертеру.   -  person giani.sim    schedule 11.07.2017
comment
Вы должны установить BindingContext. Опубликуйте свою ViewModel и свой полный XAML... вы должны определить свой конвертер в XAML, например ‹local:DoubleToIntConverter x:Key=intConverter /›. Что такое Коллекция={Привязка селфи}??   -  person Alessandro Caliaro    schedule 11.07.2017
comment
Смотрите мой отредактированный пост   -  person giani.sim    schedule 11.07.2017


Ответы (1)


Если я правильно понял, вы хотели бы знать, является ли ваш элемент в Selfies последним или нет. Я думаю, вы не можете сделать это с IValueConverter. Я предлагаю использовать свойство в вашем Model.Selfie, которое вы устанавливаете каждый раз, когда добавляете/удаляете элемент из своей коллекции.

person Alessandro Caliaro    schedule 11.07.2017