如何绑定XAML内部代码中的数据



我有这个类:

public partial class Calendar : ContentPage, INotifyPropertyChanged
{
public ICommand EventSelectedCommand => new Command(async (item) => await ExecuteEventSelectedCommand(item));
public ICommand DayTappedCommand => new Command<DateTime>(async (date) => await DayTapped(date));
public EventCollection Events { get; set; }
private void SetCalendar()
{
Events = new EventCollection
{
[DateTime.Now] = new List<EventModel>
{
new EventModel { Name = "Herrenabend, 10:00 - 12:00 – 5000 Scanns", ID = 100},
};
}

我想把数据绑定到我的日历上。我试过这个:

<Grid Grid.Row="1" Grid.Column="1">
<controls:Calendar
x:Name="calender"
DayTappedCommand="{Binding DayTappedCommand}"
Events="{Binding Q2go.MainMenu_Partners.Calendar.Events}">
<controls:Calendar.EventTemplate>
<DataTemplate>
<StackLayout>
<Label
Text="{Binding Name}"
FontAttributes="Bold"
FontSize="Medium" >
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="ClickOnLabel"
/>
</Label.GestureRecognizers>
</Label>

<Label
Grid.Row="1"
Text="{Binding ID}"
FontSize="8" >
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="ClickOnLabel"
/>
</Label.GestureRecognizers>
</Label>

<StackLayout.GestureRecognizers>
<TapGestureRecognizer 
Command="{Binding BindingContext.EventSelectedCommand, Source={x:Reference test}}" 
CommandParameter="{Binding .}" />
</StackLayout.GestureRecognizers>
</StackLayout>
</DataTemplate>
</controls:Calendar.EventTemplate>
</controls:Calendar>
</Grid>

但这些数据并没有被输入日历,也没有任何事件被触发。这里缺失的环节在哪里?

我的想法:Events="{Binding Q2go.MainMenu_Partners.Calendar.Events}">我做的每件事都是正确的。但是什么也不显示。为什么?

我知道,如果我只是在代码中将数据提供给日历(calendar.events=events(,它会很好地工作(仍然没有事件处理程序(,但我希望它绑定代码中的数据。所以没有这行(calendar.events=事件(。

我在每个样本中都读到这应该有效,但对我来说并不有效。那么问题出在哪里呢?

如果页面的BindingContext设置为this,则应仅使用Events="{Binding Events}"作为绑定表达式

最新更新