I'm trying to return an Observablecollection
, what seems to be fine. When I want to get the properties of each item in the collection, I get the error "Binding: Property '' not found on".
I have the following code:
I removed all markup code, to make it easier to read
View
<ListView ItemsSource="{Binding Books}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Label Text="{Binding Title}" />
<Label Text="{Binding Description}" />
<Label Text="{Binding Date}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ViewModel
public class BookListPageViewModel : ViewModelBase
{
private ObservableCollection<Book> _books = new();
public ObservableCollection<Book> Books
{
get => _books;
set => SetProperty(ref _books, value);
}
}
Model
public class Book : ModelBase
{
public string Title { get; set; }
public string Description { get; set; }
public string Date { get; set; }
}
The weird thing is, earlier I had the class Book
inside the ViewModel
file and that did work. But I want this class to be in the Models
folder.
This is how my ViewModel
looked like before.
namespace Some.Namespace.Project
{
public class Book : ModelBase
{
public string Title { get; set; }
public string Description { get; set; }
public string Date { get; set; }
}
public class BooksListPageViewModel : ViewModelBase
{
private ObservableCollection<Book> _books = new();
public ObservableCollection<Book> Books
{
get => _books;
set => SetProperty(ref _books, value);
}
}
}
How is it that the Bindings (Title, Description, and Date)
are not found?
CodePudding user response:
I'm new to XAML and apparently it's possible to add your own x-tags
in the ContentPage
.
So in my ContentPage I added xmlns:models="clr-namespace:Namespace.To.Models"
.
With this tag I can change my DataTemplate
to <DataTemplate x:DataType="models:Book">
.
This solved the problem for me.