Как получить доступ к полям ObservableCollection<Object> в файле xaml

Я пытаюсь напечатать заголовок моего списка в файле xaml MAUI, но заголовок не отображается. Я хочу иметь доступ к полю «Заголовок» и другим полям в нем. Я использую их для печати списка дел.

вот мой файл xaml:

<CollectionView 
    ItemsSource = "{Binding Items}">

    <CollectionView.ItemTemplate>
        <DataTemplate x:DataType = "model:ToDoItem">

            <Grid Padding = "10"
                  ColumnSpacing = "10" 
                  RowSpacing = "10"
                  ColumnDefinitions = ".60*,.20*,.20*" >

                <Frame BorderColor = "#EF7C8E" CornerRadius = "5">
                    <Label 
                        Grid.Column = "0"
                        TextColor = "Black"
                        FontSize = "10"
                        Text = "{Binding Title}"/>
                </Frame>
                        
                <Button 
                    Grid.Column = "1"
                    Text = "Done" 
                    TextColor = "Black"
                    FontSize = "10"
                    Command = "{Binding UpdateCommand}"
                    CommandParameter = "{Binding Id}"/>
                <Button 
                    Grid.Column = "2"
                    Text = "Delete" 
                    TextColor = "Black"
                    FontSize = "10"
                    Command = "{Binding DeleteCommand}"
                    CommandParameter = "{Binding Id}"/>
                            
            </Grid>

        </DataTemplate>
    </CollectionView.ItemTemplate>

</CollectionView>

Также это моя MainPageViewModel:

public partial class MainPageViewModel : ObservableObject
{
    [ObservableProperty]
    private Guid id;

    [ObservableProperty]
    private bool isDone;

    [ObservableProperty]
    private string title = string.Empty;

    [ObservableProperty]
    private int? priority;

    [ObservableProperty]
    ObservableCollection<ToDoItem> items = [];
}

И мой класс ToDoItem имеет идентификатор Guid, строку Title:

public class ToDoItem(string title, int priority)
{
    public Guid Id = Guid.NewGuid();
    public DateTime CreationTime = DateTime.Now;
    public bool IsDone = false;
    public string Title = title;
    public int Priority = priority;
}

где код ToDoItem? Где вы заполняете данные?

Jason 21.03.2024 20:05

Я сказал «Поля ToDoItem». И у меня есть метод Add, который работает правильно, и в списке есть данные @Jason

Behzad Dara 21.03.2024 20:10

вы можете привязываться только к общедоступным свойствам, а не к полям. Пожалуйста, опубликуйте код для ToDoItem

Jason 21.03.2024 20:11

пространство имен ToDoList.Models; общественный класс ToDoItem (заголовок строки, приоритет int) {public Guid Id = Guid.NewGuid (); общедоступное DateTime CreationTime = DateTime.Now; public bool IsDone = false; общедоступная строка Title = заголовок; public int Priority = приоритет; } Вот он @Джейсон

Behzad Dara 21.03.2024 20:12

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

Jason 21.03.2024 20:23

Я отредактировал. Каково решение сейчас? @Джейсон

Behzad Dara 21.03.2024 20:37

Я уже дважды говорил вам, что привязываться можно только к публичным свойствам. Измените поля, к которым вы привязываетесь, в свойства C#.

Jason 21.03.2024 20:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам нужно превратить поля в вашем классе ToDoItem в свойства, вы не можете привязываться к полям.

public class ToDoItem(string title, int priority)
{
    // read-only properties
    public Guid Id { get; } = Guid.NewGuid();
    public DateTime CreationTime { get; } = DateTime.Now;

    // public properties with getters and setters
    public bool IsDone { get; set; }
    public string Title { get; set; } = title;
    public int Priority { get; set; } = priority;
}

Если вам нужно распространить изменения (для обновления пользовательского интерфейса), вам нужно будет сделать их наблюдаемыми, как в вашей ViewModel:

public class ToDoItem(string title, int priority) : ObservableObject
{
    // read-only properties
    public Guid Id { get; } = Guid.NewGuid();
    public DateTime CreationTime { get; } = DateTime.Now;

    // observable priorities will be auto-generated for these backing fields
    [ObservableProperty]
    private bool _isDone;

    [ObservableProperty]
    private string _title = title;

    [ObservableProperty]
    private int _priority = priority;
}

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

Похожие вопросы

Я пытаюсь написать простую программу, которая выбирает случайное число от 1 до 10 и дает пользователю возможность его угадать
Может ли C# неявно преобразовать параметр делегата универсальной функции?
Почему общий результат такой, как будто у 12.3 нет смысла?
Активный сеанс выхода из Telegram: Account_GetAuthorizations возвращает 0 хеша для активного сеанса
Пользовательский раскрывающийся список Blazor с выбором HTML и сортировкой по тексту, а не по значению для перечислений
Реализовано управляемое удостоверение для службы приложений для доступа к Application Insights .NET Core 3.1
Переменная «a» имеет ссылочный тип, а «A» — это пользовательский класс. Если значение «a» равно нулю, почему «a is A» дает значение true?
Как мне перебрать групповой блок нескольких типов и при этом прочитать свойство? (Формы Windows С#)
При вызове веб-API ASP.NET Core 6 я получаю сообщение об ошибке 400 неверный запрос
Как преобразовать OpenCvSharp.Mat в Emgu.CV.Mat?