WPF: свойство зависимости коллекции "доступно только для чтения и не может быть установлено из разметки" - PullRequest
9 голосов
/ 27 января 2010

Я создаю пользовательский элемент управления для отображения трехмесячного календаря. Элемент управления основан на элементе управления WPF Calendar (WPF Toolkit 2009-06), и я хочу передать некоторые свойства календаря соответствующим свойствам моего пользовательского элемента управления. Свойства пользовательского элемента управления настроены как свойства зависимости, а их базовые типы соответствуют типам свойств календаря. Вот моя разметка:

<StackPanel>
    <toolkit:Calendar Name="MasterCalendar" 
        SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}"
        SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}"
        SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/>
    <toolkit:Calendar Name="SlaveCalendar1" 
        DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=MasterCalendar, Mode=OneWay}"
        SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}"
        SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}"
        SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/>
    <toolkit:Calendar Name="SlaveCalendar2" 
        DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=SlaveCalendar1, Mode=OneWay}"
        SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}"
        SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}"
        SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/>
</StackPanel>

Все свойства связываются без проблем, кроме свойства SelectedDates. При его привязке я получаю следующую ошибку:

Свойство 'SelectedDates' доступно только для чтения и не может быть установлено из разметки.

Я подозреваю, что это потому, что свойство SelectedDates является коллекцией, но я не уверен, как решить проблему. Может кто-нибудь объяснить мне причину проблемы и предложить решение? Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 27 января 2010

Если я вас хорошо понимаю, в вашем коде есть свойства зависимостей, которые совпадают по названию, и введите свойства элементов управления Calendar в вашем пользовательском элементе управления. Вы пытаетесь назначить коллекцию SelectedDates различных элементов управления Calendar для свойства Dependency с тем же именем в вашем коде позади.

Вы можете просто сделать это с помощью строки кода:

this.SelectedDates=SlaveCalendar1.SelectedDates

В соответствующем EventHandler, который срабатывает при добавлении выбранной даты.

Даже если для привязки установлено значение OneWayToSource, фрагмент кода SelectedDates= является назначением. Поскольку свойство SelectedDates не имеет установщика, невозможно написать этот фрагмент кода.

Здесь вы можете найти ссылку на документацию Calendar Control *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...