在一个自定义组件中,我定义了一个 ARRAY 类型的可绑定属性:
public static BindableProperty LabelsProperty = BindableProperty.Create(nameof(LabelStrings), typeof(string[]), typeof(BLSelector), null, BindingMode.Default, propertyChanged: OnLabelsPropertyChanged);
public string[] LabelStrings
{
get => (string[])GetValue(LabelsProperty);
set => SetValue(LabelsProperty, value);
}
private static void OnLabelsPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
var current = bindable as BLSelector;
// Check the number of strings
if (current.Commands != null && current.LabelStrings.Count() != current.Commands.Count())
{
Debug.WriteLine("Component::BLSelector - Bad number of Labels");
throw new TargetParameterCountException();
}
// Updates the number of Label Controls
current.LabelControls = new Label[current.LabelStrings.Count()];
// Set up the layout
current.GridContendUpdate();
}
我想使用 XAML 文件中的这个组件,因此像这样设置这个属性:
<components:BLSelector>
<components:BLSelector.LabelStrings>
<x:Array Type="{x:Type x:String}">
<x:String>" Activités "</x:String>
<x:String>" Prestations "</x:String>
</x:Array>
</components:BLSelector.LabelStrings>
</components:BLSelector>
当我启动它时,应用程序在没有消息的情况下崩溃(由于空引用?)。如果在设置器上放置断点,我可以看到它永远不会被调用。
但是......如果我在组件的构造函数中添加一个“内部”初始化,如下所示,setter 被调用两次(来自内部声明和 XAML 文件的数据 - 这是正常的)并且应用程序执行不崩溃。
public BLSelector()
{
InitializeComponent();
LabelStrings = new string[2]{ "Test 1", "Test 2" };
}
如果我只将属性分配给 XAML 文件中定义的数组,为什么应用程序会崩溃?XAML 中真正的数组类型是什么?有初始化问题吗?任何想法 ?
非常感谢您的建议