Syncfusion 压延机 OnMonthCellLoaded 自定义事件将空值传递给我的命令
Syncfusion calender OnMonthCellLoaded custom event is passing a null to my command
前言:Syncfusion 为 Xamarin.Forms 提供了一个名为 SfCalendar 的免费日历控件。此日历有一个名为 OnMonthCellLoaded 的事件。这个事件的问题是它的事件参数是 MonthCell 类型,不幸的是它没有继承自 System.EventArgs。这是一个问题,因为事件的 eventargs 必须从 System.EvenArgs 继承,以便 Prism EventToCommand 行为正确使用它。
Objective:我正在尝试使用棱镜行为绑定 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 class 所在的命名空间的别名。
现在让我们看一下我的视图模型中的命令实现:
public DelegateCommand<MonthCellEventArgs> BindMonthCellToDateCommand { get; set; }
public ViewModel()
{
BindMonthCellToDateCommand = new DelegateCommand<MonthCellEventArgs>(
(MonthCellEventArgs obj) =>
{
// more code here
现在一切都按计划进行,直到我用调试器点击 MonthCellEventArgs obj
并且 obj 始终为空。
如有任何帮助,我们将不胜感激。
好的,所以我已经通过电子邮件将此事发送给 Syncfusion,他们通过将 MonthCellLoaded 事件处理程序的 args 参数更改为从 System.EventArgs 继承来解决了这个问题。更多信息在他们的在线论坛 here.
当且仅当我使用 Corcav 行为(参见 link)而不是 Prism 行为 时,我的上述解决方案才有效。
我们已经解决了“在 SfCalendar 中使用 EventToCommand 行为时抛出 System.ArgumentException”的问题。根据实现,Monthcell 已从 View 移至 EventArgs,并且在 OnMonthCellLoaded 事件中已弃用并使用 MonthCellLoadedEventArgs。请在下面找到此修复程序的自定义程序集。
自定义程序集: http://www.syncfusion.com/downloads/support/directtrac/217023/ze/Assembly1814496033.zip
请在替换自定义程序集之前清除 NuGet 缓存。请在下面找到 link,
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.3.0.21\Xamarin\lib\pcl\Syncfusion.SfCalendar.XForms.dll
{Syncfusion 安装位置} \Essential Studio.3.0.21\Xamarin\lib\Android\Syncfusion.SfCalendar.XForms.dll
{Syncfusion 安装位置}\EssentialStudio.3.0.21\Xamarin\lib\Android\Syncfusion.SfCalendar.XForms.Android.dll
{Syncfusion 安装位置} \Essential Studio.3.0.21\Xamarin\lib\iOS\Syncfusion.SfCalendar.XForms.dll
{Syncfusion 安装位置}\EssentialStudio.3.0.21\Xamarin\lib\iOS\Syncfusion.SfCalendar.XForms.iOS.dll
此致,
Vigneshkumar
前言:Syncfusion 为 Xamarin.Forms 提供了一个名为 SfCalendar 的免费日历控件。此日历有一个名为 OnMonthCellLoaded 的事件。这个事件的问题是它的事件参数是 MonthCell 类型,不幸的是它没有继承自 System.EventArgs。这是一个问题,因为事件的 eventargs 必须从 System.EvenArgs 继承,以便 Prism EventToCommand 行为正确使用它。
Objective:我正在尝试使用棱镜行为绑定 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 class 所在的命名空间的别名。
现在让我们看一下我的视图模型中的命令实现:
public DelegateCommand<MonthCellEventArgs> BindMonthCellToDateCommand { get; set; }
public ViewModel()
{
BindMonthCellToDateCommand = new DelegateCommand<MonthCellEventArgs>(
(MonthCellEventArgs obj) =>
{
// more code here
现在一切都按计划进行,直到我用调试器点击 MonthCellEventArgs obj
并且 obj 始终为空。
如有任何帮助,我们将不胜感激。
好的,所以我已经通过电子邮件将此事发送给 Syncfusion,他们通过将 MonthCellLoaded 事件处理程序的 args 参数更改为从 System.EventArgs 继承来解决了这个问题。更多信息在他们的在线论坛 here.
当且仅当我使用 Corcav 行为(参见 link)而不是 Prism 行为 时,我的上述解决方案才有效。
我们已经解决了“在 SfCalendar 中使用 EventToCommand 行为时抛出 System.ArgumentException”的问题。根据实现,Monthcell 已从 View 移至 EventArgs,并且在 OnMonthCellLoaded 事件中已弃用并使用 MonthCellLoadedEventArgs。请在下面找到此修复程序的自定义程序集。
自定义程序集: http://www.syncfusion.com/downloads/support/directtrac/217023/ze/Assembly1814496033.zip
请在替换自定义程序集之前清除 NuGet 缓存。请在下面找到 link, 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.3.0.21\Xamarin\lib\pcl\Syncfusion.SfCalendar.XForms.dll {Syncfusion 安装位置} \Essential Studio.3.0.21\Xamarin\lib\Android\Syncfusion.SfCalendar.XForms.dll {Syncfusion 安装位置}\EssentialStudio.3.0.21\Xamarin\lib\Android\Syncfusion.SfCalendar.XForms.Android.dll {Syncfusion 安装位置} \Essential Studio.3.0.21\Xamarin\lib\iOS\Syncfusion.SfCalendar.XForms.dll {Syncfusion 安装位置}\EssentialStudio.3.0.21\Xamarin\lib\iOS\Syncfusion.SfCalendar.XForms.iOS.dll
此致,
Vigneshkumar