Динамическая форма на основе списков, не обновляя пользовательского интерфейса при изменении DropdownList (рендеринг)C#

Место общения программистов C#
Ответить
Anonymous
 Динамическая форма на основе списков, не обновляя пользовательского интерфейса при изменении DropdownList (рендеринг)

Сообщение Anonymous »

Я строю компонент 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»