You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让WinUI 3的ItemsRepeater在数据更新后正确显示内容?

WinUI3 ItemsRepeater 绑定不更新问题解决方法

核心原因

你的ChapterItems大概率使用了普通List<T>类型,它无法自动通知UI集合变化;另外x:Bind默认是OneTime模式,仅在初始化时加载数据,后续集合更新不会触发UI刷新。

具体修复步骤

  1. 替换集合类型为ObservableCollection<T>
    ObservableCollection<T>实现了INotifyCollectionChanged接口,当集合元素添加、删除或重置时会自动通知UI更新。修改代码后台的集合定义:
// 替换原来的List<ChapterModel>
public ObservableCollection<ChapterModel> ChapterItems { get; } = new ObservableCollection<ChapterModel>();

提取到章节数据后,通过Clear()和Add()方法更新集合:

// 假设extractedChapters是你从MP3中提取的章节列表
ChapterItems.Clear();
foreach (var chapter in extractedChapters)
{
    ChapterItems.Add(chapter);
}
  1. 设置绑定模式为OneWay
    在XAML的ItemsRepeater中,显式指定x:Bind的模式为OneWay,确保UI能响应集合变化:
<ItemsRepeater ItemsSource="{x:Bind ChapterItems, Mode=OneWay}">
    <ItemsRepeater.ItemTemplate>
        <DataTemplate x:DataType="local:ChapterModel">
            <!-- 绑定章节标题,确保路径对应你的模型属性 -->
            <TextBlock Text="{x:Bind Title}" />
        </DataTemplate>
    </ItemsRepeater.ItemTemplate>
</ItemsRepeater>
  1. 验证数据上下文
    确保窗口的DataContext已正确设置。如果ChapterItems定义在窗口代码后台,在构造函数中添加:
public MainWindow()
{
    this.InitializeComponent();
    DataContext = this;
}
  1. 后续扩展注意(可选)
    如果后续要实现可编辑时间戳,你的ChapterModel类需要实现INotifyPropertyChanged接口,确保属性值变化时UI能同步更新:
public class ChapterModel : INotifyPropertyChanged
{
    private string _title;
    public string Title
    {
        get => _title;
        set
        {
            _title = value;
            OnPropertyChanged();
        }
    }

    // 同理添加时间戳属性...

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

内容的提问来源于stack exchange,提问作者Snivets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:47:25