0



在一个自定义组件中,我定义了一个 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 中真正的数组类型是什么?有初始化问题吗?任何想法 ?

非常感谢您的建议

4

1 回答 1

0

可绑定属性的命名约定是可绑定属性标识符必须与 Create方法中指定的属性名称匹配,并附加“Property” 。因此,尝试更改您的可绑定属性名称:

public static BindableProperty LabelStringsProperty = BindableProperty.Create(nameof(LabelStrings), typeof(string[]), typeof(BLSelector), null, BindingMode.Default, propertyChanged: OnLabelsPropertyChanged);
于 2020-07-27T02:30:04.863 回答