更新项目时 ObservableCollection 不更新 DataGrid

问题描述 投票:0回答:1

我正在尝试反序列化 json 文件,然后使用生成的可观察集合来获取 Datagrid 控件。到这里一切都好。

当我尝试更新集合时,数据网格在滚动之前不会更新。我不知道为什么,我理解可观察的集合 Datagrid 应该自动更新。

这是我的代码:

MainWindow.xaml.cs:

 public ObservableCollection<Item> Chapters { get; set; } = new();
  

        public class Item
        {
            public int id { get; set; }
            public string date { get; set; }
            public string title { get; set; }
            public string description { get; set; }
            public string URL { get; set; }
        }

        public class Root
        {
            public List<Item> items { get; set; }
        }

反序列化json文件并将其转换为observableCollection:

var text = File.ReadAllText(@"C:\Users\Carlos\Desktop\test.json");
Chapters = new ObservableCollection<Item>(JsonConvert.DeserializeObject<Root>(text).items.ToList());

我尝试更新集合,但 Datagrid 只是在滚动时更新:

  private void btnCadena_Click(object sender, RoutedEventArgs e)
        {
            Chapters[2].title = "test";
        }

MainWindow.xaml:

<controls:DataGrid  x:Name="DgChapters"vItemsSource="{x:Bind Chapters}"/>

提前致谢

c# datagrid observablecollection winui-3 community-toolkit-mvvm
1个回答
2
投票

ObservableCollection
通知集合中的更改,而不是每个项目内部的更改。

我会使用 CommunityToolkit.Mvvm NuGet 包来通知每个项目内的更改。

// The class needs to be partial for the CommunityToolkit.Mvvm.
public partial class Item : ObservableObject
{
    [ObservableProperty]
    // The CommunityToolkit.Mvvm will automatically generate an UI-interactive
    // "ID" property for you.
    private int id;

    [ObservableProperty]
    // Same here. A "Title" property will be auto-generated.
    private string title = string.Empty;
}
© www.soinside.com 2019 - 2024. All rights reserved.