ListView -刷新数据
使用ObservableCollection最常见的原因是让组件(如网格、树视图、树列表、下拉列表)在你改变集合时发生变化或做出反应。
当你想这样刷新组件数据源时,有两个重要的框架行为需要注意——当ObservableCollection实例触发事件时,以及当组件不是一个可观察集合时,如何刷新组件的数据。
在本文中:
重新绑定的方法
要刷新列表视图
使用数据OnRead
,打电话给重新绑定
方法TelerikListView
参考。这将触发OnRead
事件并在处理程序中执行业务逻辑。
@*点击重新绑定按钮将从ListView中删除第一项并刷新数据*@ @ @使用Telerik.DataSource.Extensions 按下重新绑定将从ListView中删除第一项并重新绑定它。
重新绑定 @context。< / h4名称> < h5 > @context。Team
@code {private List SourceData {get;设置;} private TelerikListView ListViewRef {get;设置;} void ReadItems(listviewreaddeventargs args) {if (SourceData == null) {SourceData = Enumerable。Range(1,5).Select(x => new SampleData {Id = x, Name = $"Name {x}", Team = $"Team {x}"}).ToList();} var datasourceResult = SourceData.ToDataSourceResult(args.Request);arg游戏。数据= datasourceResult.Data; args.Total = datasourceResult.Total; } void RebindListView() { if (SourceData.Count > 0) { SourceData.RemoveAt(0); } ListViewRef.Rebind(); } public class SampleData { public int Id { get; set; } public string Name { get; set; } public string Team { get; set; } } } @* Styles would usually go to to the site stylesheet *@
作为我们
3.0.1
版本中我们引入了重新绑定
方法到组件引用。这将使本文中的其他方法过时。
可观测的数据
数据绑定组件可以从实时数据中获益——当数据源集合发生更改时,组件应该进行更新以反映该更改。Blazor套件的Telerik UI中的大多数数据绑定组件都实现了这样的功能。
当数据
的集合,该集合实现INotifyCollectionChanged
接口(例如ObservableCollection
), Telerik组件订阅其CollectionChanged
要更新的事件。这意味着添加项、删除项或清除集合更新组件(其)阀门()
,.Remove ()
和.Clear ()
方法)。
Observable集合会触发CollectionChanged
事件发生时,添加
,删除
和清晰的
方法被调用。当您更改其中一个元素的字段值时,它们不会触发它。
@*添加/删除员工,看看ListView对这个变化的反应。*@ @ @using System.Collections.ObjectModel 添加员工 删除员工 员工列表
@context。< / h4名称> < h5 > @context。Team
@code{void AddEmployee() {var x = ListViewData。计数+ 1;ListViewData。添加(new SampleData { Id = x, Name = $"Name {x}", Team = $"Team {x % 3}" }); } void RemoveEmployee() { if (ListViewData.Count > 0) { ListViewData.RemoveAt(ListViewData.Count - 1); } } ObservableCollection ListViewData { get; set; } = new ObservableCollection(Enumerable.Range(1, 5).Select(x => new SampleData { Id = x, Name = $"Name {x}", Team = $"Team {x % 3}" })); public class SampleData { public int Id { get; set; } public string Name { get; set; } public string Team { get; set; } } } @* Styles would usually go to to the site stylesheet *@
如果需要向集合中添加/从集合中删除许多项,请考虑创建一个新集合并提供其对data参数的引用。因此,组件将只重新呈现一次(当数据收集引用被更改时),而不是为了响应Add/Remove事件而多次重新呈现。
新馆藏参考
在Blazor中,框架将触发OnParametersSet
事件(这是子组件如何对外部更改做出反应),只有当它能够检测到通过相应参数(如数据
查看Telerik组件的数据源)。这种检测的工作原理如下:
对于基本类型(如数字、字符串),当它们的值发生变化时就会发生这种情况。
对于复杂类型(如数据集合,如
列表
,或任何IEnumerable
(以及特定于应用程序的模型/对象),当对象引用发生更改时就会发生这种情况。因此,您通常需要创建
新
视图模型字段的引用(例如TreeViewData = new List< mytreeviewem >(theUpdatedDataCollection);
),当你想要更新组件时。
@*添加/删除员工或更改集合,看看ListView对该更改的反应。*@ 添加员工 删除员工 更改员工数据 员工列表
@context。< / h4名称> < h5 > @context。Team
@code{void AddEmployee() {var x = ListViewData。计数+ 1;ListViewData。添加(new SampleData { Id = x, Name = $"Name {x}", Team = $"Team {x % 3}" }); ListViewData = new List(ListViewData); } void RemoveEmployee() { if (ListViewData.Count > 0) { ListViewData.RemoveAt(ListViewData.Count - 1); ListViewData = new List(ListViewData); } } void ChangeData() { var newData = Enumerable.Range(6, 5).Select(x => new SampleData { Id = x, Name = $"Name {x}", Team = $"Team {x % 3}" }).ToList(); ListViewData = new List(newData); } List ListViewData { get; set; } = Enumerable.Range(1, 5).Select(x => new SampleData { Id = x, Name = $"Name {x}", Team = $"Team {x % 3}" }).ToList(); public class SampleData { public int Id { get; set; } public string Name { get; set; } public string Team { get; set; } } } @* Styles would usually go to to the site stylesheet *@