Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Подарки от программис'тов

25.08.22 14:16
Re: Подарки от программис'тов
 
alex445 коренной житель
в ответ AlexNek 25.08.22 12:19, Последний раз изменено 25.08.22 14:29 (alex445)

Байндинги в Блейзор:


one-way between view and view model (or code behind for view) of the same component:

@PropName - in view


two-way between view and view model of the same component:

@bind-PropName - in view


two-way between two components:

Parameter + EventCallback + code that invokes the event callback - in code behind of the child component

<ChildComponent @bind-ChildPropName="parentFieldOrProperty" @bind-PropName:event="ChildEventCallback"> - in view of the parent component


Специально выделил жирным в последней строчке - жонглирование именами членов двух компонентов.


Плюс всякие неочевидные тонкости, о которых надо знать, типа


"Generally, avoid creating components that write directly to their own component parameters. For more information, see ASP.NET Core Razor components."


Т.е. у вас есть свойство с атрибутом "параметр", но вы не можете в него писать. Нужно свойство-обёртку для него сделать:


[Parameter]
public string? ChildMessage { get; set; }

private string BoundValue
{
    get => ChildMessage ?? string.Empty;
    set => ChildMessageChanged.InvokeAsync(value);
}


Ладно с байндингами, но тьюториалы по ним тоже кучу вещей не договаривают. Например, тут приводится двусторонний байндинг лишь для представления и коуд бехайнд, а для двухстороннего байндинга между разными компонентами нужно использовать параметры и кучу дополнительного кода (коллбеки, хендлеры), как показано здесь или здесь (последняя ссылка, кстати, на тоже немного устаревший тьюториал - там некоторые вещи из 6 версии фреймворка отсутствуют, но сейчас точно не помню, какие).


В который раз убеждаюсь, что лучше читать оригинальный МСДН. Там тьюториалы тоже иногда замудрёно написаны, но хотя бы актуальная информация и примеры есть.

 

Перейти на