如何从XAML初始化类型为Array的可绑定属性





在自定义组件中,我定义了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);

相关内容

  • 没有找到相关文章

最新更新