首页 > 解决方案 > 如何从 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}"> 我做的一切都是正确的。但什么也没有显示。这是为什么?

我知道,如果我只是将数据提供给代码中的日历(calender.events = events),它就可以正常工作(仍然没有事件处理程序),但我希望它从代码中绑定数据。所以没有这条线(calender.events = events)。

我在每个示例中都读到这应该有效,但它不适合我。那么问题出在哪里?

标签: xamlxamarin.formsdata-binding

解决方案


如果您的页面BindingContext设置为,this那么您应该只使用Events="{Binding Events}"Binding 表达式


推荐阅读