Syncfusion日历OnMonthCellLoaded自定义事件将null传递给我的命令

时间:2018-10-06 22:52:54

标签: xaml xamarin.forms prism syncfusion sfcalendar

前言:Syncfusion为Xamarin.Forms提供了一个称为SfCalendar的免费日历控件。此日历有一个称为OnMonthCellLoaded的事件。此事件的问题在于,它的eventargs是MonthCell类型,不幸的是它没有继承自System.EventArgs。这是一个问题,因为事件的eventarg必须继承自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 :(得分:2)

好吧,所以我已经通过电子邮件发送给Syncfusion,他们已经通过将MonthCellLoaded事件处理程序的args参数更改为从System.EventArgs继承来解决了此问题。在其在线论坛here中有更多信息。

仅当我使用 Corcav行为(参见链接)而不是原始行为时,上述解决方案才有效。

答案 1 :(得分:1)

我们已解决了以下问题:“ 在SfCalendar中使用EventToCommand行为时抛出了System.ArgumentException 。按照实现,Monthcell从View移到EventArgs,在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安装位置} \ EssentialStudio \ 16.3.0.21 \ Xamarin \ lib \ iOS \ Syncfusion.SfCalendar.XForms.iOS.dll

此致

Vigneshkumar R