我正在研究一個Xamarin項目,以瞭解它是如何工作的,但是我遇到了一個我似乎無法解決的問題。ListView.ItemTemplate沒有被設置和事件沒有被觸發
我有一個列表視圖itemplate存儲在我的XAML中的listview標籤內,它定義了一個標籤,並且該標籤的文本是從數據源綁定的集合,但是當我的項目通過itemsource加載時,重寫tostring而不是我的綁定,這會導致問題。我的itemtapped事件處理程序也沒有工作,似乎並沒有解僱。我正在使用VS for mac。
這裏是我的XAML的形式
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="BrainStorageApp.MainPage"
Title="View Notes">
<ListView ItemsSource="{Binding Items}"
x:Name="MainListView"
HasUnevenRows="true"
IsGroupingEnabled="true"
IsPullToRefreshEnabled="true"
IsEnabled="true"
CachingStrategy="RecycleElement"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
RefreshCommand="{Binding RefreshDataCommand}">
<ListView.Header>
<StackLayout Padding="40"
Orientation="Horizontal"
HorizontalOptions="FillAndExpand"
BackgroundColor="{StaticResource Primary}}">
<Label Text="Your Notes"
HorizontalTextAlignment="Center"
HorizontalOptions="FillAndExpand"
TextColor="White"
FontAttributes="Bold"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding title}" FontSize="14" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
希望我不只是愚蠢和缺少的東西,因爲我的XAML似乎建立罰款和我的ItemSource似乎很好地工作。如果你需要看我的代碼只是評論,我會編輯提供。
編輯:不確定它是否有任何區別,但此頁面位於Tab鍵頁面。
編輯2:這是我的主要xaml.cs文件的代碼,根據要求。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace BrainStorageApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{
private BrainstorageApiClass BrainstorageClass;
private UserClass User;
public MainPage(string username)
{
InitializeComponent();
BrainstorageClass = new BrainstorageApiClass();
User = new UserClass();
User.Username = username;
BindingContext = new ListViewPageViewModel(BrainstorageClass.LoadNotes(User.Username));
}
void Handle_ItemTapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
{
Console.WriteLine(sender.ToString());
}
}
class ListViewPageViewModel : INotifyPropertyChanged
{
public ObservableCollection<NoteItem> Items { get; }
public ListViewPageViewModel(List<NoteItem> list)
{
Items = new ObservableCollection<NoteItem>(list);
RefreshDataCommand = new Command(
async() => await RefreshData());
}
public ICommand RefreshDataCommand { get; }
async Task RefreshData()
{
IsBusy = true;
//Load Data Here
await Task.Delay(2000);
IsBusy = false;
}
bool busy;
public bool IsBusy
{
get { return busy; }
set
{
busy = value;
OnPropertyChanged();
((Command)RefreshDataCommand).ChangeCanExecute();
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
編輯3:
NoteItem
namespace BrainStorageApp
{
public class NoteItem
{
public int id;
public string title;
public string content;
public DateTime createdat;
public DateTime updatedat;
public NoteItem(JToken Token)
{
id = int.Parse(Token["id"].Value<string>());
title = Token["Note_Title"].Value<string>();
content = Token["Note_Content"].Value<string>();
createdat = DateTime.Parse(Token["created_at"].Value<string>());
updatedat = DateTime.Parse(Token["updated_at"].Value<string>());
}
public override string ToString()
{
return title;
}
}
}
請顯示ViewModel以及如何設置您的BindingContext。 –
@ Sven-MichaelStübe新增:)注意我刪除了事件處理程序,因爲我認爲可以修復此問題的結果:P – Jaxi
和'NoteItem'? –