Привязка поля viewmodel вне источника элемента

Привет, у меня есть ItemSource, который связывает список контактов

<ListView  x:Name="contactsListView" ItemsSource="{Binding contacts}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Image Source="{Binding Should be to my View Model instead of Contacts}"></Image>
                            <Label Text="{Binding FullName}"></Label>
                        </StackLayout>

                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>

привязка полного имени работает нормально. Моя проблема в том, что источник изображения не включен в модель контакта, поэтому мне нужно получить его из моей модели представления. Как я могу это сделать?

ПОСМОТРЕТЬ МОДЕЛЬ

    public class ContactsViewModel : INotifyPropertyChanged
{
    public ObservableCollection<Contact> contacts { get; set; }
    private string _contactImage;

    public string ContactImage
    {
        get => _contactImage; set
        {
            _contactImage = value;
            OnPropertyChanged("ContactImage");
        }
    }

    public ContactsViewModel(List<Contact> _contacts)
    {
        contacts = new ObservableCollection<Contact>(_contacts);
        ContactImage = "arrow.png";



    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

КОД ЗА ВИДОМ

    public partial class ContactListPage : TabbedPage
{
    public ContactsViewModel vm;
    public ContactListPage (List<Contact> _contacts)
    {
        vm = new ContactsViewModel(_contacts);
        BindingContext = vm;
        InitializeComponent();

    }
}
1
0
827
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это связано с тем, что объем предмета ListView отличается от уровня выше. Чтобы преодолеть это, создайте ссылку на родительский элемент управления. Я вижу, вы уже назвали свой ListView, так что мы можем это использовать.

Сделайте это так: <Image Source="{Binding Path=BindingContext.ContactImage, Source={x:Reference contactsListView}}"></Image>

Другие вопросы по теме