Предисловие: Syncfusion предоставляет бесплатный элемент управления Calender под названием SfCalendar для Xamarin.Forms.Этот календарь имеет событие OnMonthCellLoaded.Проблема с этим событием состоит в том, что его eventargs имеет тип MonthCell, который, к сожалению, не наследуется от System.EventArgs.Это проблема, потому что eventargs события должны наследоваться от System.EvenArgs, чтобы он правильно использовался поведением Prism EventToCommand.
Цель: я пытаюсь связать событие OnMonthCellLoaded с использованием поведения призмы в порядкеустановить контекст данных MonthCell.Я надеюсь, что это понятно.
Текущая ситуация:
Я расширил календарь SfCalendar следующим образом:
public class sfCalendarExtended : Syncfusion.SfCalendar.XForms.SfCalendar
{
public event EventHandler<MonthCellEventArgs> OnMonthCellLoadedExtended;
public sfCalendarExtended()
{
this.OnMonthCellLoaded += SfCalendarExtended_OnMonthCellLoaded;
}
private void SfCalendarExtended_OnMonthCellLoaded(object sender, MonthCell e)
{
if (this.OnMonthCellLoadedExtended != null)
{
if (e != null)
{
Debug.Print(e.Date.ToLongDateString());
var eventArgs = new MonthCellEventArgs() { Value = new MonthCell(e.Date) };
this.OnMonthCellLoadedExtended(this, eventArgs);
}
}
}
}
public class MonthCellEventArgs : System.EventArgs
{
public MonthCell Value { get; set; }
public MonthCellEventArgs()
{
}
}
Это мой Xaml
<Controls:sfCalendarExtended x:Name="calendar">
<Syncfusion:SfCalendar.MonthViewSettings>
<Syncfusion:MonthViewSettings DateSelectionColor="#dddddd" CellTemplate="{StaticResource weathertemplate}"/>
</Syncfusion:SfCalendar.MonthViewSettings>
<Syncfusion:SfCalendar.Behaviors>
<prismbehaviors:EventToCommandBehavior EventName="OnMonthCellLoadedExtended" Command="{Binding BindMonthCellToDateCommand}"/>
</Syncfusion:SfCalendar.Behaviors>
</Controls:sfCalendarExtended>
Где элементы управления - это псевдоним для пространства имен, в котором находится класс sfCalenderExtended.
Теперь давайте взглянем на реализацию Command в моей модели представления:
public DelegateCommand<MonthCellEventArgs> BindMonthCellToDateCommand { get; set; }
public ViewModel()
{
BindMonthCellToDateCommand = new DelegateCommand<MonthCellEventArgs>(
(MonthCellEventArgs obj) =>
{
// more code here
Теперь все идет в соответствии спланировать, пока я не нажму MonthCellEventArgs obj
с помощью отладчика, а obj всегда будет нулевым.
Любая помощь будет высоко оценена.