在自定义组件中,我定义了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上设置断点,我可以看到它从未被调用
但是。。。如果我加上一个";内部";在组件的构造函数中初始化,如下所示,setter被调用两次(从内部声明和XAML文件的数据调用,这是正常的(,应用程序不会崩溃
public BLSelector()
{
InitializeComponent();
LabelStrings = new string[2]{ "Test 1", "Test 2" };
}
如果我只将属性分配给XAML文件中定义的数组,为什么应用程序会崩溃?XAML中数组的真正类型是什么?是否存在初始化问题?知道吗
非常感谢您的建议
可绑定属性的命名约定是属性标识符必须与
Create
方法;属性"附加到它。因此,请尝试更改您的可绑定属性名称:
public static BindableProperty LabelStringsProperty = BindableProperty.Create(nameof(LabelStrings), typeof(string[]), typeof(BLSelector), null, BindingMode.Default, propertyChanged: OnLabelsPropertyChanged);