Я пытаюсь сделать пользовательский элемент управления DatePicker.Он основан на текстовом поле, где я могу выбирать разные типы дат.Поэтому, когда я фокусируюсь на текстовом поле, я создаю всплывающее окно со списком, в который добавляются следующие элементы:
Today
Last 7 days
Month to date
Year to date
The previous Month
Specific date
All dates before
All dates after
Date range
Это работает нормально, если я жестко закодировал все элементы.Теперь я хочу расширить этот список, чтобы вместо него использовать Listbox.ItemTemplate, чтобы я мог настроить элемент listbox.У меня есть класс DateChoice, для которого я создаю список и связываю его с источником элементов списка.
internal class DateChoiceItem
{
internal DateChoiceEnum DateChoiceEnum { get; set; }
internal string DateChoiceName { get; set; }
internal bool ExtendedCalender { get; set; }
}
this.DateChoice.ItemsSource = new ObservableCollection<DateChoiceItem>() {
new DateChoiceItem(){DateChoiceName = "Today", DateChoiceEnum = DateChoiceEnum.Today},
new DateChoiceItem(){DateChoiceName = "Last 7 days", DateChoiceEnum = DateChoiceEnum.Last7Days},
new DateChoiceItem(){DateChoiceName = "Month to date", DateChoiceEnum = DateChoiceEnum.MonthToDate},
new DateChoiceItem(){DateChoiceName = "Year to date", DateChoiceEnum = DateChoiceEnum.YearToDate},
new DateChoiceItem(){DateChoiceName = "The previous Month", DateChoiceEnum = DateChoiceEnum.PreviousMonth},
new DateChoiceItem(){DateChoiceName = "Specific date", DateChoiceEnum = DateChoiceEnum.SpecificDate, ExtendedCalender = true},
new DateChoiceItem(){DateChoiceName = "All dates before", DateChoiceEnum = DateChoiceEnum.AllDatesBefore, ExtendedCalender = true},
new DateChoiceItem(){DateChoiceName = "All dates after", DateChoiceEnum = DateChoiceEnum.AllDatesAfter, ExtendedCalender = true},
new DateChoiceItem(){DateChoiceName = "Date range", DateChoiceEnum = DateChoiceEnum.DateRange, ExtendedCalender = true }
};
Поскольку это пользовательский контроль, я поместил xaml-код в файлы ресурсов, и он выглядит следующим образом.:
<ListBox x:Name="PART_DateChoice" Grid.Column="0" Grid.Row="0">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="16"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="name" Grid.Column="0" Text="{Binding Path=DateChoiceName}"/>
<TextBlock Grid.Column="2" Text=">" Visibility="{Binding Path=ExtendedCalender, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Итак, я хочу, чтобы это выглядело так
Today
Last 7 days
Month to date
Year to date
The previous Month
Specific date >
All dates before >
All dates after >
Date range >
Здесь я использую 2 текстовых поля, чтобы показать имя, и даже если возможно расширить элемент списка, чтобы я мог показать некоторыекалендари, если мне нужно выбрать 1 или 2 конкретные даты.Но все, что я получаю, это список, заполненный '>'Вот так
>
>
>
>
>
>
>
>
>
Похоже, что Text = "{Binding Path = DateChoiceName}" не работает.Что мне здесь не хватает?
Теперь я могу решить эту проблему с помощью большого количества жесткого кодирования, но я предпочитаю привязать мой список к списку и заставить работать привязку !!
У кого-нибудь есть такая же проблема?
Заранее спасибо.