Сначала давайте начнем с привязки.
A ContentPresenter
представляет свой пользовательский интерфейс через свойство Content
.Это просто object
.В XAML есть несколько причудливых способов перевода определенных объектов в визуальные объекты, но в случае неудачи он просто вызывает ToString()
для этого object
и отображает текст.Глядя на свой IValueConverter
, вы возвращаете int[]
, и Content
становится этим.Почему это не показывает System.Int32[]
неизвестно с кодом, который вы дали, но это то, что происходит.
Итак, зная, что давайте посмотрим на ваш IValueConverter
.
Вы возвращаете array
из int
(int[]
).Теперь это System.Int32[]
, когда вы звоните ToString()
.
Если вы Template
были типом, который содержал несколько элементов, таких как ItemsControl
, тогда назначение ItemsSource
автоматически делает то же самое, но длякаждый элемент в массиве.
Использование IValueConverter
неверно.Это ничего не конвертирует и не то, для чего используется конвертер.Вам просто нужно сделать чистую привязку к свойству в ViewModel или где-либо еще, но не использовать для этого IValueConverter
.
Конвертер используется, когда у вас уже есть какая-то привязка;но я не хочу использовать результат этой привязки и предпочел бы «преобразовать» этот результат во что-то еще.
Например: если вы хотите связать свойство, которое вернуло значение int
но предпочел бы преобразовать это int
в связанное enum
имя;тогда вы бы написали конвертер, который читает в int
и возвращает соответствующее enum
имя.
Исправление:
Трудно дать с XAML, который выпредоставил, но знаю, что есть несколько способов сделать это.Первый;вам нужно иметь хотя бы шаблон, который исключает массив в качестве привязки, чтобы отображать их такими, какие они есть.Глядя на ваше изображение, я не верю, что это для вас.Я полагаю, вы уже добавили ContentControl
в шаблон;и этот шаблон является частью ItemsSource
другого элемента управления.Если это так, то вы должны связать ItemsSource
с массивом;и в ContentPresenter
просто привязка к данным, которые приходят к нему, вот так:
<ContentPresenter x:Name="NormalText"
Content="{Binding}"/>
Все, что сказано;Я не могу дать вам однозначное и правильное решение, не видя общий XAML.
После обновления я считаю, что проблема в том, что вы стилизуете CalenderButton
и присваиваете Content
там к массиву.Напишите привязку, как я делал выше;затем пользовательский Style
Calendar
и установите привязку к массиву.Я никогда не делал стиль Календаря, но, просматривая его, я могу сказать, что Calendar
имеет panel
и ItemsSource
некоторой моды, а шаблон этих элементов - CalendarButton
.Другими словами, дни распределяются по кнопкам из календаря, и вы пытаетесь сделать это непосредственно с кнопки.