From b68a7483970833a4b0e3827142d259514047d77d Mon Sep 17 00:00:00 2001 From: capdiem Date: Tue, 3 Sep 2024 22:50:33 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20(DataTable):=20failed=20to=20upd?= =?UTF-8?q?ate=20the=20selection=20by=20Selected=20parameter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataIterator/MDataIterator.razor.cs | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Masa.Blazor/Components/DataIterator/MDataIterator.razor.cs b/src/Masa.Blazor/Components/DataIterator/MDataIterator.razor.cs index 88e69fb6fb..d76c7c7675 100644 --- a/src/Masa.Blazor/Components/DataIterator/MDataIterator.razor.cs +++ b/src/Masa.Blazor/Components/DataIterator/MDataIterator.razor.cs @@ -80,11 +80,7 @@ public partial class MDataIterator : MData /// Gets or sets the selected items. /// [Parameter, Obsolete("Use Selected instead.")] - public IEnumerable? Value - { - get => GetValue>(); - set => SetValue(value); - } + public IEnumerable? Value { get; set; } [Parameter, Obsolete("Use SelectedChanged instead.")] public EventCallback> ValueChanged { get; set; } @@ -112,6 +108,9 @@ public IEnumerable? Value [Parameter] public EventCallback<(IEnumerable, bool)> OnToggleSelectAll { get; set; } + private IEnumerable? _prevValue; + private IEnumerable? _prevSelected; + public bool EveryItem => SelectableItems.Any() && SelectableItems.All(IsSelected); public bool SomeItems => SelectableItems.Any(IsSelected); @@ -130,7 +129,7 @@ protected override void OnInitialized() { base.OnInitialized(); - UpdateSelection(); + UpdateSelection(init: true); } public override Task SetParametersAsync(ParameterView parameters) @@ -142,16 +141,23 @@ public override Task SetParametersAsync(ParameterView parameters) return base.SetParametersAsync(parameters); } - protected override void RegisterWatchers(PropertyWatcher watcher) + protected override void OnParametersSet() { - base.RegisterWatchers(watcher); + base.OnParametersSet(); - watcher.Watch>(nameof(Value), UpdateSelection) - .Watch>(nameof(Selected), UpdateSelection); + UpdateSelection(); } - private void UpdateSelection() + private void UpdateSelection(bool init = false) { + if (!init && ReferenceEquals(_prevSelected, Selected) && ReferenceEquals(_prevValue, Value)) + { + return; + } + + _prevSelected = Selected; + _prevValue = Value; + List? keys = null; if (Value is not null)