我想從 sqlite 讀取一些資料并將它們系結到 listview 這是我的代碼:
public ObservableCollection<ChapterProperty> Chapters { get; set; } = new();
using var db = new AlAnvarDBContext();
Chapters = new ObservableCollection<ChapterProperty>(await db.Chapters.ToListAsync());
和我的 XAML
<ListView ItemsSource="{x:Bind Chapters}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="tables:ChapterProperty">
<StackPanel>
<TextBlock Text="{x:Bind Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
但我的視圖沒有更新,我看不到專案。哪里錯了?
uj5u.com熱心網友回復:
您使用 OneTime 系結系結到章節:
<ListView ItemsSource="{x:Bind Chapters}">
然后替換章節:
Chapters = new ObservableCollection<ChapterProperty>(await db.Chapters.ToListAsync());
x:Bind 默認為 OneTime。也不清楚章節是否設定為發送 PropertyChanged 通知。如果不是,那么系結無論如何都不會在屬性更改時更新。
uj5u.com熱心網友回復:
而不是像這樣在運行時創建新集合:
Chapters = new ObservableCollection<ChapterProperty>(await db.Chapters.ToListAsync());
...您應該修改已經存在的集合:
var chapters = await db.Chapters.ToListAsync();
Chapters.Clear();
if (chapters != null)
foreach (var chapter in chapters)
Chapers.Add(chapter);
洗掉 setter 以確保您的初始集合永遠不會被替換:
public ObservableCollection<ChapterProperty> Chapters { get; } = new();
如果您在每次更新時將集合替換為另一個集合,那么首先沒有理由使用 an ObservableCollection<T>
。
uj5u.com熱心網友回復:
您應該改用 TemplateBinding
https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/templatebinding-markup-extension
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481620.html