So in the razor.cs there is a method that imports an xml and displays it in the child components. How it is rendered is shown in the .razor, but for some reason only the Models-property in the child components in the for loop get updated (count 33) and the main VitalizationSetting component's Models only has count 29. Even though when I debug they both show count 33.
.razor.cs (parent):
private List<ModelDto> Models { get; set; }
public VitalizationSetting VitalizationSetting { get; set; } = null;
public List<VitalizationSetting> VitalizationTabRefs { get; set; } = [];
private VitalizationSetting VitalizationTabRef
{
set { VitalizationTabRefs.Add(value); }
}
private async Task ImportVitalizationSettings()
{
if (string.IsNullOrWhiteSpace(InputXml)) return;
try
{
var IFCVitalizationSettings = IFC.Vitalization.VitalizationSettings.FromXml(InputXml);
(VitalizationSetting, VitalizationTabRefs) = await Converter.ConvertToNativeVitalizationSettings(IFCVitalizationSettings, Models);
VitalizationTabCount = VitalizationTabRefs.Count;
// Sync available Document Intelligence models through all VitalizationSetting-objects
Models.Add(VitalizationSetting.SelectedModel);
foreach (var tab in VitalizationTabRefs)
{
Models.Add(tab.SelectedModel);
}
VitalizationSetting.Models = Models; // Here Count is 33
foreach (var tab in VitalizationTabRefs)
{
tab.Models = Models; // Here Count is also 33
}
InputXml = "";
}
catch (Exception e)
{
Console.WriteLine($"Error during import: {e.Message}");
}
}
.razor (parent):
<VitalizationSetting Models="Models" @ref="VitalizationSetting" VitalizationSettingData="@VitalizationSetting" /> // in this component it displays only 29 items
@if (VitalizationTabCount > 0)
{
@for (int i = 0; i < VitalizationTabCount; i++)
{
// each of these components show 33 items
<VitalizationSetting IsTab="true" Models="Models" @ref="VitalizationTabRef" OnDelete="RemoveVitalizationTab"
VitalizationSettingData="@VitalizationTabRefs[i]" />
}
}
Can anybody see what I'm doing different or incorrect between these 2 components?
Also in the child components the OnParametersSetAsync() is triggered for each component shown in the .razor:
protected override async Task OnParametersSetAsync()
{
try
{
if (VitalizationSettingData == null || VitalizationSettingData.SelectedModel == null) return;
TabName = VitalizationSettingData.TabName;
TabIndex = VitalizationSettingData.TabIndex;
Models = VitalizationSettingData.Models; // Here it's also always count 33, but in the UI it's not :/
SelectedModel = VitalizationSettingData.SelectedModel;
SelectedDocumentType = VitalizationSettingData.SelectedDocumentType ?? null;
UseComposedModel = VitalizationSettingData.UseComposedModel;
ClassificationMinConfidence = VitalizationSettingData.ClassificationMinConfidence;
CalibrateColumns();
}
catch (Exception e)
{
throw;
}
}
VitalizationSetting Models="Models" @ref="VitalizationSetting" VitalizationSettingData="@VitalizationSetting" />'.VitalizationSetting` is a component, with a@refthat also hasVitalizationSettingDataparameter pointing to itself? Can you produce a minimal reproducible example to demonstrate the problem? At the moment this is just code snippets that you think are where the problem lies, but may well not be! Trying to piece them together is very difficult.VitalizationSettingDatabecause @ref wouldn't update anything (parent to child) >:l. You reckon @ref should update the child if changes are made in the parent?