Настраиваемое событие Syncfusion calender OnMonthCellLoaded передает моей команде значение null - PullRequest
0 голосов
/ 07 октября 2018

Предисловие: 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 всегда будет нулевым.

Любая помощь будет высоко оценена.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Мы исправили проблему с « System.ArgumentException выдан при использовании поведения EventToCommand в SfCalendar ».В соответствии с реализацией Monthcell перемещается в EventArgs из View и считается устаревшим в событии OnMonthCellLoaded и использует MonthCellLoadedEventArgs.Ниже приведены пользовательские сборки для этого исправления.

Пользовательские сборки: http://www.syncfusion.com/downloads/support/directtrac/217023/ze/Assembly1814496033.zip

Пожалуйста, очистите кэш NuGet перед заменой пользовательских сборок.Пожалуйста, найдите ссылку ниже, https://www.syncfusion.com/kb/6987/how-to-clear-nuget-cache

Версия сборки: 16.3.0.21 Указания по установке: Замените файлы «Syncfusion.SfCalendar.XForms.dll, Syncfusion.SfCalendar.XForms.Android.dll, Syncfusion.SfCalendar.XForms.iOS.dll »в следующих папках.Перед заменой новых сборок сделайте резервную копию старых сборок.{Установленное расположение Syncfusion} \ Essential Studio \ 16.3.0.21 \ Xamarin \ lib \ pcl \ Syncfusion.SfCalendar.XForms.dll {Установленное расположение Syncfusion} \ Essential Studio \ 16.3.0.21 \ Xamarin \ lib \ Android \ Syncfusion.SfCalendar.XForms.dll {Установленное расположение Syncfusion} \ EssentialStudio \ 16.3.0.21 \ Xamarin \ lib \ Android \ Syncfusion.SfCalendar.XForms.Android.dll {Установленное расположение Syncfusion} \ Essential Studio \ 16.3.0.21 \ Xamarin \ lib \ iOS \ Syncfusion.SfCalendar.XForms.dll {Syncfusion Installed location} \ EssentialStudio \ 16.3.0.21 \ Xamarin \ lib \ iOS \ Syncfusion.SfCalendar.XForms.iOS.dll

С уважением,

Vigneshkumar R

0 голосов
/ 10 октября 2018

Хорошо, поэтому я отправил Syncfusion по электронной почте об этом, и они решили эту проблему, изменив параметр args обработчика событий MonthCellLoaded для наследования от System.EventArgs.Больше информации на их онлайн форуме здесь .

Мое решение выше работает тогда и только тогда, когда я использую поведения Corcav (см. Ссылку) вместо поведения призмы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...