gpt4 book ai didi

c# - 显示约会显示 UWP CalendarViewDayItem

转载 作者:太空狗 更新时间:2023-10-30 01:30:41 26 4
gpt4 key购买 nike

我想做的是在我的 CalendarView 的 CalendarViewDayItem 中显示日期相关的约会。

我的约会类:

public class CalJobItemVM : ViewModelBase
{
public CalJobItemVM() { }
public CalJobItemVM(ServiceJob serviceJob)
{
Title = serviceJob.EON
Date = serviceJob.StartDate
}
private string _title;
public string Title
{
get { return _title; }
set { Set(ref _title, value); }
}
private DateTimeOffset _date;
public DateTimeOffset Date
{
get { return _date; }
set { Set(ref _date, value); }
}
}

在我的 Page.Resources 中,我有以下结构:

<Style TargetType="CalendarViewDayItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CalendarViewDayItem">
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="26" HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Title}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

理论上,我想将一个列表绑定(bind)到 CalendarView 的 ItemsSource,并且根据日期,应将约会的选择添加到 CalendarViewDayItem 的 ItemsSource。可悲的是,我没有找到这样做的任何方法。绑定(bind)结构应该是这样的:

CalendarView (ItemsSource = List<CalJobItemVM>())
|-> CalendarViewDayItem (ItemsSource = CalendarView.ItemsSource.Where(x=>x.Date == CalendarViewDayItem.Date)
|-> ListView (ItemsSource = CalendarViewDayItem.ItemsSource)

或者:

CalendarView (ItemsSource = List<CalJobItemVM>())
|-> ListView (ItemsSource = CalendarView.ItemsSource.Where(x=>x.Date == ParentControl.Date)

或者覆盖 ListView 的 ItemsSource,它过滤返回的 CalJobItemMV 集合,该集合由其 ParentControl (CalendarViewDayItem) 的日期值过滤。

我知道 CalendarView 和 CalendarViewDayItem 没有 ItemsSource,所以我也希望获得有关如何以支持 ItemsSource 的方式修改这两个控件的建议。

也非常欢迎任何替代方法(不使用代码隐藏)来解决我的问题。

最佳答案

看看 example of Phased Rendering .此示例允许您使用 SetDensityColors 为每一天添加彩色条。方法。这可能更适合小型日历 View 。

如果您必须有一个项目列表,您可以执行以下操作:

<CalendarView CalendarViewDayItemChanging="OnCalendarViewDayItemChanging"
HorizontalDayItemAlignment="Right" VerticalDayItemAlignment="Top">
<CalendarView.CalendarViewDayItemStyle>
<Style TargetType="CalendarViewDayItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CalendarViewDayItem">
<Grid Margin="0,40,0,0">
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="26" HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Title}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</CalendarView.CalendarViewDayItemStyle>
</CalendarView>

在后面的代码中,设置项目的数据上下文:

private void OnCalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args)
{
// Render basic day items.
if (args.Phase == 0)
{
// Register callback for next phase.
args.Item.DataContext = GetCalJobItemVM(args.Item.Date);
}
}

关于c# - 显示约会显示 UWP CalendarViewDayItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810133/

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