Связывание переменных внутри шаблона данных maui

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

Как видите, IntelliSense может получить доступ к переменной:

Связывание переменных внутри шаблона данных maui

Но код XAML не получает никакого значения. Когда я помещаю переменную вне , все работает нормально. Вот пример кода:

<CollectionView.ItemTemplate>
    <DataTemplate>
        <Grid ColumnDefinitions = "*,*">
            <VerticalStackLayout Grid.Column = "{Binding TempColNum}">
                <Image Source = "{Binding MainImage}" Aspect = "AspectFit" HeightRequest = "120" x:DataType = "model:ImagesJson"/>
                <Label Text = "{Binding Topic}" x:DataType = "model:ImagesJson"/>
                <Label Text = "{Binding Likes}" x:DataType = "model:ImagesJson"/>
            </VerticalStackLayout>
        </Grid>
    </DataTemplate>
</CollectionView.ItemTemplate>

Редактировать:

Вот код позади:

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using neview.Model.Profile;
using System.Collections.ObjectModel;
    
namespace neview.ViewModel.Profile
{
    public partial class ProfileViewModel : ObservableObject
    {
        public ProfileViewModel(ImagesLoad postLoad)
        {
            tempColNum = 1;
            this.imagesLoad = postLoad;
            isRefreshing = false;
        }
        //------------------------------------------------------------------------
        // COMMANDS
        // get images
        [RelayCommand]
        public async Task GetImagesAsync()
        {
            var localMainPost = await imagesLoad.GetImages();
            if (imagesCollection.Count() != 0)
            {
                imagesCollection.Clear();
            }
                
            foreach (var i in localMainPost)
            {
                imagesCollection.Add(i);
            }
            IsRefreshing = false;
        }
        
        //------------------------------------------------------------------------
        // VARIABLES
        public ObservableCollection<ImagesJson> imagesCollection { get; } = new();

        ImagesLoad imagesLoad;

        [ObservableProperty]
        bool isRefreshing;

        [ObservableProperty]
        int tempColNum;
    }
}

откуда ты знаешь, что он не работает? Попробуйте привязать TempColNum к Label, чтобы убедиться, что значение установлено и привязывается правильно. А что за тип TempColNum?

Jason 05.04.2023 19:45

TempColNum имеет тип int32. Я попытался привязать TempColNum к тексту метки, и он ничего не показывает.

siflJebatkundy 05.04.2023 19:49

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

Jason 05.04.2023 19:55

это свойство на модели ImagesJson?

Jason 05.04.2023 19:56

Неа. Я добавил код в редактирование.

siflJebatkundy 05.04.2023 19:58

вам нужно использовать относительную привязку, если вы хотите привязаться к свойству, которое не является частью текущего контекста привязки

Jason 05.04.2023 20:01

Я пытался, но не смог (вероятно, не знаю как). Можете ли вы показать мне синтаксис, пожалуйста?

siflJebatkundy 05.04.2023 20:06

Вы должны показать окружающий XAML, а не только часть с DataTemplate, тогда будет легче увидеть и объяснить, как это исправить. Как уже писал @Jason, вам понадобится относительная привязка.

Julian 05.04.2023 20:06

пожалуйста, покажите нам, что вы пробовали, если вам нужна дополнительная помощь. Есть много-много существующих вопросов об относительных привязках как для MAUI, так и для XF.

Jason 05.04.2023 20:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам нужно будет использовать RelativeSource, потому что контекст привязки изменяется на тип объектов, находящихся внутри коллекции, при использовании DataTemplate, здесь это будет ImagesJson, в то время как вы хотите выполнить привязку к ProfileViewModel.

Обновите свой XAML следующим образом:

<CollectionView.ItemTemplate>
    <DataTemplate x:DataType = "model:ImagesJson">
        <Grid ColumnDefinitions = "*,*">
            <VerticalStackLayout Grid.Column = "{Binding TempColNum, Source = {RelativeSource AncestorType = {x:Type viewmodel:ProfileViewModel}}}">
                <Image Source = "{Binding MainImage}" Aspect = "AspectFit" HeightRequest = "120"/>
                <Label Text = "{Binding Topic}"/>
                <Label Text = "{Binding Likes}"/>
            </VerticalStackLayout>
        </Grid>
    </DataTemplate>
</CollectionView.ItemTemplate>

Отказ от ответственности: я не уверен, что привязка Grid.Column к свойству действительно будет работать, потому что Grid.Column является присоединенным свойством.

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