2016-05-16 41 views
2

我想綁定選定的日曆視圖項目並將其設置爲 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

回答

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酒店內一個以上的項目,一定要改變SelectionModeMultiple

+1

非常感謝,我會嘗試當我在家=) – SeeuD1

+0

@ SeeuD1,當然讓我知道你走了。 –