我正在嘗試執行自定義的日期選擇器控件。它基於一個文本框,我可以選擇不同類型的日期。因此,當我將注意力放在文本框上時,我創建了一個彈出窗口,其中包含添加以下項目的列表框。在自定義控件的列表框項目模板中使用綁定
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,所以我可以自定義listboxitem。我創建了一個DateChoice類,我創建了一個列表並將其綁定到listboxs itemssource。
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代碼在resourcefiles一個customcontrol,它看起來像這樣:
<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個文本框來顯示名稱,即使可以擴展listboxitem,以便我可以顯示一些日曆,如果我需要選擇1或2個特定的日期。但我得到的是一個充滿'>'的列表框。像這樣
>
>
>
>
>
>
>
>
>
它看起來像Text =「{Binding Path = DateChoiceName}」不起作用。我在這裏錯過了什麼?
現在我可以通過做很多硬編碼來解決這個問題,但我優先考慮將列表綁定到列表框並使綁定工作!
有沒有人有同樣的問題?
在此先感謝。
我需要的是,是不是不夠,我將它綁定在我的代碼?因爲所有的項目都被填充到列表框中,但是「綁定路徑」不起作用... –
啊,我明白了。那麼'ListBox'的名字應該是'DateChoice'而不是'PART_DateChoice'? – WaltiD
我不認爲這是一個問題,因爲DateChoice只是我在控件中用來引用列表框的內部名稱,像這樣:private ListBox DateChoice {get {return this.Template.FindName(「PART_DateChoice」,this)as ListBox; }} –