Anonymous
Динамическая форма на основе списков, не обновляя пользовательского интерфейса при изменении DropdownList (рендеринг)
Сообщение
Anonymous » 09 июл 2025, 17:28
Я строю компонент Blazor, который отображает динамическую форму внутри A [syncfusion sftoolbar] и пользовательского подтверждения. Список. < /p>
Когда я выбираю новое значение из раскрывающегося списка (например, изменение типа на передачу, TTS и т. Д.), Пользовательский интерфейс не обновляет. row.
Код: Выделить всё
@if (!HideFilter.UntrackedValue)
{
@if (!InsideDialog || DialogIsOpen)
{
@UiResource.Anifilter_View_Dialog_Header_Create
@UiResource.Anifilter_View_Dialog_SubHeader_Create
@foreach (var (dropAction, i) in _dropActionValues.Select((v, i) => (v, i)))
{
@switch (_dropActionValues[i].UntrackedValue)
{
case AniFilterType.Transfer:
break;
case AniFilterType.TTS:
break;
case AniFilterType.Announcement:
break;
case AniFilterType.ServiceType:
break;
}
}
Add
@((MarkupString)DeleteToolTip.UntrackedValue)
}
else
{
}
}
protected void OnDropActionChanged(int index, TrackedValue value)
{
if (index < 0 || index >= _dropActionValues.Count)
return;
_dropActionValues[index].Update(value);
AniFilter.Update(u =>
{
var setters = new Action[]
{
x => x!.DropAction1 = value,
x => x!.DropAction2 = value,
x => x!.DropAction3 = value,
x => x!.DropAction4 = value,
x => x!.DropAction5 = value
};
setters[index](u);
});
AniFilterChanged.InvokeAsync(AniFilter);
StateHasChanged();
}
private List _dropActionValues =
[
new(null), new(null), new(null), new(null), new(null)
];
private void InitializeDropActionValues()
{
const int expectedCount = 5; // par exemple, selon ton UI
if (_dropActionValues == null || _dropActionValues.Count != expectedCount)
{
_dropActionValues = new List(expectedCount);
for (int i = 0; i < expectedCount; i++)
{
_dropActionValues.Add(new TrackedValue(null));
}
}
}
private void InitializeAnnouncementValues()
{
const int expectedCount = 5;
if (_announcementValues == null || _announcementValues.Count != expectedCount)
{
_announcementValues = new List(expectedCount);
for (int i = 0; i < expectedCount; i++)
{
_announcementValues.Add(new TrackedValue(null));
}
}
}
private void InitializeServiceTypeValues()
{
const int expectedCount = 5;
if (_serviceTypeValues == null || _serviceTypeValues.Count != expectedCount)
{
_serviceTypeValues = new List(expectedCount);
for (int i = 0; i < expectedCount; i++)
{
_serviceTypeValues.Add(new TrackedValue(null));
}
}
}
protected override void OnInitialized()
{
OnNameReadOnlyChanged();
OnDialogOpened();
InitializeDropActionValues();
InitializeAnnouncementValues();
InitializeServiceTypeValues();
AniFilterTypeOptions = new TrackedList(
Enum.GetValues()
.Cast()
.Select(e => new KeyValuePair(e.ToString(), e))
.ToList()
);
base.OnInitialized();
}
protected override ITrackedValue[] ParametersToTriggerRendering =>
[IsNameHidden,
SearchText,
DialogIsOpen,
Filters,
HideFilter,
InsideDialog,
ShowReleaseTable,
IsNameDisabled,
IsImmediatelyValidated,
AniFilter,
IsDialogOpened,
InputValidator,
ShowAddDialog,
IsCreating,
IsContinuousCreateMode,
CreateProgressTracker,
IsCreateFormValid,
AniFilterTypeOptions,
SourceKeyName,
SourceValueName,
IsDropActionDisabled,
IsPatternDisabled,
AudioNames,
ServiceTypeNames,
AnnouncementPlaceholder,
AbwurfCount,
SelectedEntries
];
< /code>
Почему компонент не может повторно Render при изменении элемента списка или добавлен новый элемент?TrackedValue обновления?
Изменения в выборе выпадающего списка? Возможно, из -за структуры TrackedValue и того, как компоненты синхронизации обрабатывают связывание значений?
Подробнее здесь:
https://stackoverflow.com/questions/796 ... -rendering
1752071287
Anonymous
Я строю компонент Blazor, который отображает динамическую форму внутри A [syncfusion sftoolbar] и пользовательского подтверждения. Список. < /p> Когда я выбираю новое значение из раскрывающегося списка (например, изменение типа на передачу, TTS и т. Д.), Пользовательский интерфейс не обновляет. row.[code] @if (!HideFilter.UntrackedValue) { @if (!InsideDialog || DialogIsOpen) { @UiResource.Anifilter_View_Dialog_Header_Create @UiResource.Anifilter_View_Dialog_SubHeader_Create @foreach (var (dropAction, i) in _dropActionValues.Select((v, i) => (v, i))) { @switch (_dropActionValues[i].UntrackedValue) { case AniFilterType.Transfer: break; case AniFilterType.TTS: break; case AniFilterType.Announcement: break; case AniFilterType.ServiceType: break; } } Add @((MarkupString)DeleteToolTip.UntrackedValue) } else { } } protected void OnDropActionChanged(int index, TrackedValue value) { if (index < 0 || index >= _dropActionValues.Count) return; _dropActionValues[index].Update(value); AniFilter.Update(u => { var setters = new Action[] { x => x!.DropAction1 = value, x => x!.DropAction2 = value, x => x!.DropAction3 = value, x => x!.DropAction4 = value, x => x!.DropAction5 = value }; setters[index](u); }); AniFilterChanged.InvokeAsync(AniFilter); StateHasChanged(); } private List _dropActionValues = [ new(null), new(null), new(null), new(null), new(null) ]; private void InitializeDropActionValues() { const int expectedCount = 5; // par exemple, selon ton UI if (_dropActionValues == null || _dropActionValues.Count != expectedCount) { _dropActionValues = new List(expectedCount); for (int i = 0; i < expectedCount; i++) { _dropActionValues.Add(new TrackedValue(null)); } } } private void InitializeAnnouncementValues() { const int expectedCount = 5; if (_announcementValues == null || _announcementValues.Count != expectedCount) { _announcementValues = new List(expectedCount); for (int i = 0; i < expectedCount; i++) { _announcementValues.Add(new TrackedValue(null)); } } } private void InitializeServiceTypeValues() { const int expectedCount = 5; if (_serviceTypeValues == null || _serviceTypeValues.Count != expectedCount) { _serviceTypeValues = new List(expectedCount); for (int i = 0; i < expectedCount; i++) { _serviceTypeValues.Add(new TrackedValue(null)); } } } protected override void OnInitialized() { OnNameReadOnlyChanged(); OnDialogOpened(); InitializeDropActionValues(); InitializeAnnouncementValues(); InitializeServiceTypeValues(); AniFilterTypeOptions = new TrackedList( Enum.GetValues() .Cast() .Select(e => new KeyValuePair(e.ToString(), e)) .ToList() ); base.OnInitialized(); } protected override ITrackedValue[] ParametersToTriggerRendering => [IsNameHidden, SearchText, DialogIsOpen, Filters, HideFilter, InsideDialog, ShowReleaseTable, IsNameDisabled, IsImmediatelyValidated, AniFilter, IsDialogOpened, InputValidator, ShowAddDialog, IsCreating, IsContinuousCreateMode, CreateProgressTracker, IsCreateFormValid, AniFilterTypeOptions, SourceKeyName, SourceValueName, IsDropActionDisabled, IsPatternDisabled, AudioNames, ServiceTypeNames, AnnouncementPlaceholder, AbwurfCount, SelectedEntries ]; < /code> Почему компонент не может повторно Render при изменении элемента списка или добавлен новый элемент?TrackedValue[/code] обновления? Изменения в выборе выпадающего списка? Возможно, из -за структуры TrackedValue и того, как компоненты синхронизации обрабатывают связывание значений? Подробнее здесь: [url]https://stackoverflow.com/questions/79695802/list-based-dynamic-form-not-updating-ui-on-dropdownlist-change-rendering[/url]