Как убедиться, что параметр компонента задан с помощью @bind-?

#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)