【问题标题】:How to use CalenderView in UWP MVVM如何在 UWP MVVM 中使用 CalenderView
【发布时间】:2016-09-12 11:42:45
【问题描述】:

我想绑定选中的日历视图项并将其设置为 一个日期时间变量。

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

这也是日历视图的文档:

CalenderView MSDN

在文档中是一个属性 SelectedDate,但我只在 XAML SelectedDateChanged EventHandler 中看到。但我想在 MVVM 中进行。

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

更新

跟随来自

的评论

@Juo Zuo:"CalendarView 有一个 SelectedDates 属性。通常我们可以使用这个属性来设置选定的日期,例如:MyCalendarView.SelectedDates.Add(new DateTime(2016, 5, 5));。但是这个属性是只读,我们不能用它来绑定。所以,恐怕没有办法用Binding设置选定的日期”

我会扩展问题。

我的问题是:

有什么方法可以将日历视图与 MSDN 中的 MVVM 模式一起使用?

【问题讨论】:

  • 您可以绑定到日历的SelectedDateSelectedDate="{Binding Path=DueDate,Converter={StaticResource DateConverter }}"
  • 没有SelectedDate 只有SelectedDateChanges EventHandler
  • Mhm 有没有办法在 MVVM 中使用 Calenderview 和 ICommand ?像'calenderview c = sender as CalenderView;日期时间 d = c.Selecteddates;'

标签: c# xaml mvvm uwp win-universal-app


【解决方案1】:

您需要做的就是创建一个附加属性并将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

【讨论】:

  • @SeeuD1,一定要告诉我你的情况。
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2018-04-06
相关资源
最近更新 更多