Короткий вопрос: есть ли способ визуализировать уже созданный экземпляр Экземпляр компонента?
Я хочу иметь динамическое диалоговое окно c содержимого, и содержимое должно быть создано с использованием класса Component и они также могут иметь пользовательские свойства, атрибуты и т. д. c.
У меня есть следующая структура Blazor, где все в MainComponent
и Dialog
разделены, но могут связываться друг с другом, используя IDialogService
:
<main>
<MainComponent />
</main>
<Dialog />
Однако я хочу, чтобы содержимое внутри Dialog.razor
было динамическим c, поэтому я пытаюсь это сделать:
<dialog data-active="@(this.IsShowing)">
<dialog-cover></dialog-cover>
<dialog-container>
@if (this.contentFragment != null)
{
@(this.contentFragment)
}
</dialog-container>
</dialog>
@code {
RenderFragment contentFragment { get; set; }
internal void SetFragments(ComponentBase dialog)
{
this.contentFragment = builder =>
{
builder.OpenComponent(0, dialog.GetType());
builder.CloseComponent();
};
this.StateHasChanged();
}
// Other logic code for showing/hiding etc
}
Это работает, пока я передаю "простой" компонент там, однако, я хочу некоторый динамический c текст, например, ConfirmDialog.razor
:
@if (this.Title != null)
{
<header>
<h2>@(this.Title)</h2>
</header>
}
@if (this.Text != null)
{
<main>
@(this.Text)
</main>
}
@code {
public string Title { get; set; }
public string Text { get; set; }
}
Использование:
var diagConfirm = new ConfirmDialog()
{
Title = "Please confirm!",
Text = "Something good happened!",
};
var result = await this.dialogService.ShowAsync(diagConfirm);
Однако, используя фрагмент вместо этого создается новый экземпляр ConfirmDialog
, а diagConfirm
не используется. В любом случае использовать экземпляр вместо просто имя класса компонента?