前言: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始终为空为止。
任何帮助将不胜感激。
答案 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