如何使用多个属性来创建约会 (Syncfusion SfScheduler .NET MAUI)?

问题描述 投票:0回答:1

enter image description here

我正在尝试创建一个约会模板,但根据我的设计,我需要多次使用背景、注释等属性来创建单个约会。 SchedulerAppointment 类阻止了此功能,我无法更改它。有什么解决办法吗?

maui syncfusion
1个回答
0
投票

请按照以下步骤来达到要求:

  1. 使用所需的属性创建自定义约会类。

  2. 然后请使用

    SchedulerAppointmentMapping
    将这些属性链接到
    SchedulerAppointment
    中的相关属性。

  3. 然后在自定义约会类中创建具有所有这些属性的约会。

  4. 最后使用“DataItem”属性将这些属性绑定到

    AppointmentTemplate

请查找示例代码片段以供参考:

定制预约课程:

公共类事件:INotifyPropertyChanged {

 private DateTime eventStartDateTime, eventEndDateTime;

 private string name;

 private Brush appointmentColor;

 private string phoneNumber;

 private string appointmentDetails;



 public event PropertyChangedEventHandler PropertyChanged;



 public DateTime EventStartDateTime

 {

     get { return eventStartDateTime; }

     set

     {

         eventStartDateTime = value;

         this.RaiseOnPropertyChanged(nameof(EventStartDateTime));

     }

 }



 public DateTime EventEndDateTime

 {

     get { return eventEndDateTime; }

     set

     {

         eventEndDateTime = value;

         this.RaiseOnPropertyChanged(nameof(EventEndDateTime));

     }

 }



 

 public string Name

 {

     get { return name; }

     set

     {

         name = value;

         this.RaiseOnPropertyChanged(nameof(Name));

     }

 }



 public Brush AppointmentColor

 {

     get { return appointmentColor; }

     set

     {

         appointmentColor = value;

         this.RaiseOnPropertyChanged(nameof(AppointmentColor));

     }

 }



 public string PhoneNumber

 {

     get { return phoneNumber; }

     set

     {

         phoneNumber = value;

         this.RaiseOnPropertyChanged(nameof(PhoneNumber));

     }

 }



 public string AppointmentDetails

 {

     get { return appointmentDetails; }

     set

     {

         appointmentDetails = value;

         this.RaiseOnPropertyChanged(nameof(AppointmentDetails));

     }

 }





 /// <summary>

 /// Invoke method when property changed.

 /// </summary>

 /// <param name="propertyName">property name</param>

 private void RaiseOnPropertyChanged(string propertyName)

 {

     this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

 }

}

ViewModel 类:

公共类 BusinessObjectViewModel

{

#region Constructor

public BusinessObjectViewModel()
{
    this.IntializeAppoitments();
}

#endregion Constructor


#region Properties


/// <summary>

/// Gets or sets appointments.

/// </summary>

public ObservableCollection<Event> Events { get; set; }


#endregion


#region Methods

/// <summary>

/// Method to initialize the appointments.

/// </summary>

private void IntializeAppoitments()

{

    this.Events = new ObservableCollection<Event>();



    var meeting = new Event();

    **meeting.EventStartDateTime = DateTime.Now;**

    **meeting.EventEndDateTime = DateTime.Now.AddHours(1);**

    **meeting.Name = "Robert Fox";**

    **meeting.PhoneNumber = "+447591441001";**

    **meeting.AppointmentDetails = "Lorem ipsum dolor";**

    **meeting.AppointmentColor = Brush.Purple;**

    this.Events.Add(meeting);
                   
}

#endregion

}

MainPage.xaml:

<DataTemplate x:Key="dayAppointmentTemplate">

    <Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="Auto" />

            <ColumnDefinition Width="*" />

            <ColumnDefinition Width="*" />

        </Grid.ColumnDefinitions>

        <BoxView Background="Green" WidthRequest="4" Grid.Column="0"/>

        <StackLayout Background="{Binding DataItem.AppointmentColor}" Grid.Column="1">

            <Label **Text="{Binding DataItem.Name}"** TextColor="White" />

            <Label **Text="{Binding DataItem.PhoneNumber}"** TextColor="White"/>

        </StackLayout>

        <StackLayout Background="{Binding DataItem.AppointmentColor}" Grid.Column="2">

            <Label **Text="{Binding DataItem.AppointmentDetails}"** TextColor="White"/>

            <Label **Text="{Binding DataItem.EventStartDateTime}"** TextColor="White"/>

        </StackLayout>

    </Grid>

</DataTemplate>

                   AppointmentsSource="{Binding Events}"

                   View="Day">

   

<scheduler:SfScheduler.DaysView>

    <scheduler:SchedulerDaysView AppointmentTemplate="{StaticResource dayAppointmentTemplate}"/>

</scheduler:SfScheduler.DaysView>

   

**<scheduler:SfScheduler.AppointmentMapping>**

    **<scheduler:SchedulerAppointmentMapping**

               **StartTime="EventStartDateTime"**

               **EndTime="EventEndDateTime"**

               **Subject="Name"**

               **Background="AppointmentColor"**

               **Notes="AppointmentDetails"/>**

**</scheduler:SfScheduler.AppointmentMapping>**

   

<scheduler:SfScheduler.BindingContext>

    <local:BusinessObjectViewModel />

</scheduler:SfScheduler.BindingContext>

   

这样,可以使用所需的所有属性创建自定义约会,并根据自定义模板将它们显示在调度程序中。

© www.soinside.com 2019 - 2024. All rights reserved.