Еще одна идея: приведенное ниже решение хранит реальное значение DateTime в списке, а не только месяц, например, 01.05.2011. Когда выбрано поле со списком, на выходе действительно будет дата.
Код:
public MainWindow()
{
InitializeComponent();
MyMonths = new List<DateTime>();
var thisMonth = new DateTime(
DateTime.Now.Year,
DateTime.Now.Month,
1);
for (var i = 0; i < 4; i++)
{
MyMonths.Add(thisMonth.AddMonths(-i));
}
this.DataContext = this;
}
public List<DateTime> MyMonths
{
get { return (List<DateTime>)GetValue(MyMonthsProperty); }
set { SetValue(MyMonthsProperty, value); }
}
public static readonly DependencyProperty MyMonthsProperty =
DependencyProperty.Register("MyMonths", typeof(List<DateTime>), typeof(MainWindow), new UIPropertyMetadata(null));
Xaml:
<StackPanel>
<ComboBox x:Name="dateCombo"
Margin="10"
SelectedIndex="0"
ItemsSource="{Binding MyMonths}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource dateTimeConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
DateTimeConverter:
public class DateTimeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is DateTime)
{
var d = (DateTime)value;
return d.ToString("MMM");
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Обновление: Для форматирования месяца:
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month