Я пытаюсь напечатать заголовок моего списка в файле 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». И у меня есть метод Add, который работает правильно, и в списке есть данные @Jason
вы можете привязываться только к общедоступным свойствам, а не к полям. Пожалуйста, опубликуйте код для ToDoItem
пространство имен ToDoList.Models; общественный класс ToDoItem (заголовок строки, приоритет int) {public Guid Id = Guid.NewGuid (); общедоступное DateTime CreationTime = DateTime.Now; public bool IsDone = false; общедоступная строка Title = заголовок; public int Priority = приоритет; } Вот он @Джейсон
пожалуйста, НЕ оставляйте код в комментариях. отредактируйте свой вопрос, включив в него дополнительную информацию. И, как я только что заметил, привязку можно выполнять только к общедоступным свойствам.
Я отредактировал. Каково решение сейчас? @Джейсон
Я уже дважды говорил вам, что привязываться можно только к публичным свойствам. Измените поля, к которым вы привязываетесь, в свойства C#.





Вам нужно превратить поля в вашем классе 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;
}
где код
ToDoItem? Где вы заполняете данные?