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