我想绑定选定的日历视图项并将其设置为 日期时间变量。
我的CalenderView Xaml看起来像:
<CalendarView Grid.Row="6" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20"/>
我在Datacontext类中有一个DateTime项:
private DateTime _DueDate;
public DateTime DueDate
{
get { return this._DueDate; }
set
{
if (this._DueDate != value)
{
this._DueDate = value;
base.PropertyOnChanged("DueDate");
}
}
}
和DateTimeConverter:
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
DateTime date = ((DateTime)value);
return date.Day + "." + date.Month + "." + date.Year;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return DateTime.Parse((string)value);
}
}
以下是日历视图的文档:
在Docs中是Property SelectedDate,但我只在XAML SelectedDateChanged EventHandler中看到。但我想在MVVM中做到这一点。
我的问题是我不知道我可以设置哪个属性
捆绑。我查看了Doc但我只找到Date=""
属性
从DatePicker但我没有找到任何CalenderView。
更新
来自
的评论 <@> @Juo Zuo:“CalendarView有一个SelectedDates属性。通常,我们可以使用此属性设置所选日期,如:MyCalendarView.SelectedDates.Add(new DateTime(2016,5,5));.但是这个属性是只读,我们不能用它来绑定。所以,我担心没有办法用Binding设置选定的日期“我会扩展问题。
我的问题是:
有没有办法将Calender View与MSDN的MVVM模式一起使用?
答案 0 :(得分:4)
您需要做的就是创建一个附加属性并将SelectedDates.Add
逻辑封装在其中。
public static class CalendarViewHelper
{
public static IList<DateTimeOffset> GetSelectedDates(DependencyObject obj)
{
return (IList<DateTimeOffset>)obj.GetValue(SelectedDatesProperty);
}
public static void SetSelectedDates(DependencyObject obj, IList<DateTimeOffset> value)
{
obj.SetValue(SelectedDatesProperty, value);
}
public static readonly DependencyProperty SelectedDatesProperty =
DependencyProperty.RegisterAttached("SelectedDates", typeof(IList<DateTimeOffset>), typeof(CalendarView),
new PropertyMetadata(null, (d, e) =>
{
var cv = d as CalendarView;
var dates = e.NewValue as IList<DateTimeOffset>;
if (cv != null && dates != null)
{
foreach (var date in dates)
{
cv.SelectedDates.Add(date);
}
}
}));
}
<CalendarView local:CalendarViewHelper.SelectedDates="{x:Bind Dates, Mode=OneWay}" />
如果您的Dates
媒体资源中包含多个项目,请务必将SelectionMode
更改为Multiple
。