1

前言:Syncfusion 为 Xamarin.Forms 提供了一个名为 SfCalendar 的免费日历控件。此日历有一个名为 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>

其中 controls 是 sfCalenderExtended 类所在的命名空间的别名。

现在让我们看一下我的视图模型中的 Command 实现:

public DelegateCommand<MonthCellEventArgs> BindMonthCellToDateCommand { get; set; }
        public ViewModel()
        {
            BindMonthCellToDateCommand = new DelegateCommand<MonthCellEventArgs>(
                (MonthCellEventArgs obj) => 
                {
    // more code here

现在一切都按计划进行,直到我MonthCellEventArgs obj使用调试器并且 obj 始终为空。

任何帮助将不胜感激。

4

2 回答 2

3

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

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

于 2018-10-10T16:05:52.837 回答
2

我们已经解决了“<strong>System.ArgumentException has been throwed while using EventToCommand behavior in SfCalendar”的问题。根据实现,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

问候,

维涅什库马尔

于 2018-10-18T09:20:58.043 回答