gpt4 book ai didi

c# - 如何在 UWP MVVM 中使用 CalenderView

转载 作者:行者123 更新时间:2023-11-30 20:36:09 24 4
gpt4 key购买 nike

我想绑定(bind)选中的Calender View Item,设置为日期时间变量。

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

这也是日历 View 的文档:

CalenderView MSDN

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

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

更新

关注来自

的评论

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

我会扩展问题。

我的问题是:

有什么方法可以将日历 View 与来自 MSDN 的 MVVM 模式结合使用吗?

最佳答案

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

关于c# - 如何在 UWP MVVM 中使用 CalenderView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37258070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com