WPF - Ошибка компиляции: теги типа 'PropertyArrayStart' не поддерживаются в разделах шаблона - PullRequest
18 голосов
/ 29 мая 2009

Обычно я не просто публиковал бы сообщение об ошибке в SO, но после того, как поиск в Google нашел только один попадание, я решил хотя бы открыть слово для этой ошибки здесь, в SO.

У меня есть пользовательский элемент управления Sparkline со свойством зависимостей Values типа unit[]. Вот пример, где я использую его в DataTemplate:

<DataTemplate DataType="{x:Type Activity:ActivityHistory}">
    <Controls:Sparkline Grid.Column="1" Values="{Binding Path=Values}" />
</DataTemplate>

Этот код не компилируется. Я получаю сообщение об ошибке:

Теги типа 'PropertyArrayStart' не поддерживаются в разделах шаблона.

Номера строк / столбцов указывают начало атрибута Values.

Это действительно бросило меня. Поиск в Google вернул один результат , где John_C столкнулся с точно такой же проблемой. К сожалению, его решение заключалось в перемещении элемента управления в отдельную сборку. Ну, мой уже в отдельной сборке. Я думаю, что что-то еще в игре.

Я никогда не слышал о PropertyArrayStart. В поисках верните только несколько страниц, связанных с сериализацией XAML. Интересные вещи, но не сильно помогают.

Думая об этом, я не могу думать ни о каких свойствах зависимостей в каркасе, которые имеют типы массивов. Это разрешено?

Я также попытался использовать вложенный элемент вместо расширения разметки для Binding.

<DataTemplate DataType="{x:Type Activity:ActivityHistory}">
    <Controls:Sparkline Grid.Column="1">
        <Controls:Sparkline.Values>
            <Binding Path="Values"/>
        </Controls:Sparkline.Values>
    </Controls:Sparkline>
</DataTemplate>

... все равно не повезло.

Любые идеи приветствуются!

1 Ответ

48 голосов
/ 29 мая 2009

Это были насыщенные событиями 27 минут ...:)

Изменение типа свойства зависимости с unit[] на IList<unit> решило проблему. Лучше всего то, что он не требовал много изменений кода, так как массив уже реализует этот интерфейс.

Я не уверен, что отправка в массив через интерфейс (callvirt) медленнее. Я думаю, да.

Оригинальное сообщение об ошибке намекает, что здесь что-то происходит, что я не совсем понимаю. Я приму любой ответ, который объясняет это правильно.

...