我有一些 NoteItem 物件,我存盤在資料庫中。我已經在 EditingPage 中對它們進行了編輯,它們已經在 DB 中,這很有效。但是當我回到 MainPage 時,我想呼叫 Task Refresh() 來顯示我添加到我的資料庫中的新 NoteItem 物件。我該怎么做?
NoteItemsViewModel.cs 中的重繪 任務(在 MainPage 中使用)
public AsyncCommand RefreshCommand { get; }
public async Task Refresh()
{
await Task.Delay(2000);
NoteItems.Clear();
var NoteItemsBeingRefreshed = await Service.GetNotesFromDB();
NoteItems.AddRange(NoteItemsBeingRefreshed);
//for debugging
foreach (var noteItem in NoteItems)
{
Console.WriteLine(noteItem.Id);
Console.WriteLine(" " noteItem.Text);
}
}
如我所見,并非所有人都理解我的問題。首先我想說的是,NoteItems 是 ObservableRangeCollection。其次,問題不是顯示更新,而是從我擁有的 SQL 資料庫更新此集合中的專案。
主頁.xaml
<ListView
x:Name="NoteItemsList"
ItemsSource="{Binding NoteItems}"
Margin="0"
FlexLayout.AlignSelf="Start"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell >
<FlexLayout JustifyContent="SpaceBetween" AlignItems="Center" Margin="20,0">
<Label
Text="{Binding Text}"
/>
以及我在 EditingPage VM 中更新資料庫的操作
await Service.AddNoteToDB(Text);
uj5u.com熱心網友回復:
在 Xamarin 中,可以使用ObservableCollection代替 List 來臨時存盤資料。每次修改 ObservableCollection 的值時,xaml 頁面都會自動重繪 。
對于您的邏輯需求,有兩種解決方法。
每次修改資料庫后修改ObservableCollection里面的值,這樣xaml頁面的值就會自動重繪 。
每次跳轉到 MainPage 時從資料庫中查詢值并更改 ObservableCollection 的值(重寫 OnAppearing 方法)。
uj5u.com熱心網友回復:
您無需呼叫重繪 方法即可將新值顯示到 UI。您應該使用系結到 XAML 中的資料模板的可觀察范圍集合,然后用于通過系結到您希望它們系結到的 UI 元素進行更新。請記住,您不想使用 foreach 回圈來更新屬性。相反,使用串列,然后在 foreach 回圈結束時,將可觀察范圍集合屬性 = 設定為串列。這將防止 UI 重新繪制 foreach 回圈的每次迭代,因為它只會更新一次系結的屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450816.html
標籤:C# xml xamarin.forms
