#blazor #blazor-component
Вопрос:
Я создал пользовательский компонент, у которого есть параметр. Я переопределил OnParametersSet
метод, чтобы создать исключение, если параметр не задан, однако мне нужно убедиться, что параметр использует двухсторонние привязки. Если он установлен как MyParameter="somevalue"
, он не вызовет исключение, и мой обратный вызов события не будет запущен (у меня определен обратный вызов события с изменением параметров). Есть ли способ убедиться, что этот параметр установлен так @bind-MyParameter="somevalue"
, чтобы дочерний компонент уведомлял об изменениях родительского компонента? Я знаю, что есть и другие способы, такие как каскадирование параметров (которые связывают его с моделью) или обратные вызовы пользовательских событий (тогда родительская страница должна передавать методы EvenCallback).
//parent
<mycustomcomponent @bind-MyParameter="parentModel.property" />
//child
<div><div/>
public List<string> MyParameter {get;set;}
[Parameter] public EventCallback<List<string>> MyParameterChanged { get; set; }
protected override void OnParametersSet()
{
base.OnParametersSet();
if (myproperty is null)
throw new ArgumentException("The 'MyParameter' property is not set", nameof(MyParameter));
}
// some methods to modify MyParameter
Ответ №1:
Я смог сделать это, проверив, есть ли у EventCallback делегат:
MyPropertyChanged.HasDelegate
возвращает значение false, если свойство установлено как MyProperty="somevalue"
вместо @bind-MyProperty="somevalue"
Заменено if (MyProperty is null)
на if (!MyPropertyChanged.HasDelegate)