代码之家  ›  专栏  ›  技术社区  ›  Amen Jlili

Syncfusion日历OnMonthCellLoaded自定义事件正在向我的命令传递null

  •  1
  • Amen Jlili  · 技术社区  · 6 年前

    前言:Syncfusion为Xamarin.Forms提供了一个名为SfCalendar的免费日历控件。此日历有一个名为OnMonthCellLoaded的事件。此事件的问题是,其eventargs的类型为MonthCell,但它不是从System.eventargs继承的。这是一个问题,因为事件的eventargs必须继承自System.EverArgs,以便Prism EventToCommand行为正确使用它。

    现状:

    我将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()
            {
    
            }
        }
    

    <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是sfcalendextended类所在的命名空间的别名。

    现在让我们来看看我的视图模型中的命令实现:

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

    现在一切都按计划进行,直到我成功 MonthCellEventArgs obj 使用调试器时,obj总是空的。

    任何帮助都将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Amen Jlili    6 年前

    好的,我已经给Syncfusion发了邮件,他们通过将MonthCellLoaded事件处理程序的args参数改为从System.EventArgs继承来解决这个问题。更多信息请访问他们的在线论坛 here .

    当且仅当我使用 科卡夫行为 (参见链接)而不是 棱镜行为 .

        2
  •  2
  •   Vignesh kumar    6 年前

    在SfCalendar中使用EventToCommand行为时引发System.ArgumentException

    自定义程序集: 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安装位置}\EssentialStudio\16.3.0.21\Xamarin\lib\Android\Syncfusion.SfCalendar.XForms.Android.dll {Syncfusion安装位置}\EssentialStudio\16.3.0.21\Xamarin\lib\iOS\Syncfusion.SfCalendar.XForms.iOS.dll

    当做,

    维涅什库马尔