如何在UWP MVVM中使用CalenderView

如何在UWP MVVM中使用CalenderView

问题描述:

我想绑定选定的日历视图项目并将其设置为 a DateTime变量。如何在UWP MVVM中使用CalenderView

我CalenderView的XAML看起来像:

<CalendarView Grid.Row="6" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20"/> 

我在DataContext类的日期时间项目:

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); 
    } 
} 

这里也是文件到日历视图:

CalenderView MSDN

在文档是属性SelectedDate,但我只在XAML SelectedDateChanged EventHandler中看到。但我想在MVVM中做到这一点。

我的问题是我不知道我可以在哪个属性上设置 绑定。我查看了文档,但是我只能从DatePicker中找到Date=""属性 ,但我没有找到CalenderView的任何内容。

UPDATE

继从

@Juo佐注释:“CalendarView有SelectedDates属性通常情况下,我们可以使用这个属性来设置选择的日期,如:。MyCalendarView.SelectedDates.Add (新的DateTime(2016,5,5));然而这个属性是只读的,我们不能用它来绑定,所以我恐怕没有办法用绑定来设置选定的日期“

我会扩大这个问题。

我的问题是:

有没有办法使用了从MSDN MVVM模式的日历视图?

+0

您可以绑定到日历的“SelectedDate”。 'SelectedDate =“{Binding Path = DueDate,Converter = {StaticResource DateConverter}}”' – Lithium

+0

没有SelectedDate只有SelectedDateChanges EventHandler – SeeuD1

+0

姆姆有没有办法在ICommand中使用MVVM中的Calenderview?像'CalenderView c = sender作为CalenderView; DateTime d = c.Selecteddates;' – SeeuD1

您只需创建一个附属属性并在其中封装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酒店内一个以上的项目,一定要改变SelectionModeMultiple

+1

非常感谢,我会尝试当我在家=) – SeeuD1

+0

@ SeeuD1,当然让我知道你走了。 –