Причина: Пределы - это ObservableCollection . Поэтому, если вы хотите установить его значение, вы должны определить коллекцию в xaml, а не перечислять Span напрямую.
Решение:
Я все же предлагаю вам использовать привязку данных, так какВы установили его как BindableProperty .
<controls:BulletPointItem BackgroundColor="LightBlue" Spans="{Binding Spans}">
И в коде позади или ViewModel
public static readonly BindableProperty SpansProperty =
BindableProperty.Create(
nameof(Spans),
typeof(ObservableCollection<Span>),
typeof(BulletPointItem),
defaultValueCreator: bindable => new ObservableCollection<Span>(),
propertyChanged: OnSpansChanged);
public ObservableCollection<Span> spans { get; set; }
spans = new ObservableCollection<Span>() {
new Span(){Text="Span1" },
new Span(){Text="Span2",FontAttributes=FontAttributes.Italic }
};
Это будет более гибким, когдаВы хотите добавить или удалить элементы из него.
Обновление
Когда вы устанавливаете промежутки исключительно из XAML. Это добавит элементы в Пролеты . Но метод OnSpansChanged будет вызываться только при установке нового значения. Таким образом, вы можете обработать логику в методе CollectionChanged . Он будет вызываться каждый раз, когда вы добавляете новый элемент в Spans.
public BulletPointItem()
{
InitializeComponent();
Spans.CollectionChanged += Spans_CollectionChanged;
}
// this method will been invoked 2 times if you add two span in xaml
private void Spans_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
var collection = sender as ObservableCollection<Span>;
//...
}