Спасибо всем, что нашли время.Я действительно нашел решение для себя.
То, что на самом деле пошло не так, было в двух местах.
- Свойства привязки будут установлены только после инициализации класса.Так что если мы вызовем метод
DesignScreenAsync
в конструкторе, который принимает значение controller name
, очевидно, будет иметь значение null.решение состоит в том, чтобы вызвать метод в conrollerName
ProprtyChanged
методе.
вот код:
public static readonly BindableProperty ControllerNameProperty = BindableProperty.Create(nameof(ControllerName), typeof(string), typeof(GenerateScreen),default(string), propertyChanged: OnControllerPropertyChange);
private static void OnControllerPropertyChange(BindableObject bindable, object oldValue, object newValue)
{
((GenerateScreen)bindable).DesignScreenAsync();
}
Обратите внимание, что я использовал BindableObject
для вызоваметод.это вызывать метод из той же инстанции.
Причина, по которой
contentView не срабатывает, состоит в том, что я не установил значение по умолчанию для bool
IsBusyProperty
, поэтому важно установить значение по умолчанию для свойства bindable.
вот код:
public static readonly BindableProperty IsBusyProperty = BindableProperty.Create(nameof(IsBusy), typeof(bool), typeof(GenerateScreen),default(bool), defaultBindingMode: BindingMode.TwoWay);