我想在我的Xamarin Forms应用程序(Prism)中使用Xuni calendar control。 如何使用Prism将日历控件的SelectionChanging事件绑定到我的ViewModel中的命令,因为我不想使用后面的代码。 到目前为止,这是我的XAML。
<xuni:XuniCalendar x:Name="calendar" MaxSelectionCount="-1" Grid.Row="0" Grid.ColumnSpan="2">
<xuni:XuniCalendar.Behaviors>
<b:EventToCommandBehavior EventName="SelectionChanging" Command="{Binding SelectionChangingCommand}"
EventArgsConverter="{StaticResource selectionChangingEventArgsConverter}" />
</xuni:XuniCalendar.Behaviors>
</xuni:XuniCalendar>
这是我的转换器:
public class SelectionChangingEventArgsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var selectionChangingEventArgs = value as CalendarSelectionChangingEventArgs;
if (selectionChangingEventArgs == null)
{
throw new ArgumentException("Expected value to be of type SelectionChangingEventArgs", nameof(value));
}
return selectionChangingEventArgs.SelectedDates;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这是我的ViewModel中的命令:
public DelegateCommand SelectionChangingCommand => new DelegateCommand(SelectionChanging);
private void SelectionChanging()
{
throw new NotImplementedException();
}
我没有收到任何错误,但ViewModel中的SelectionChangingCommand未被触发。
谢谢, 乌韦
答案 0 :(得分:1)
您实际上并不需要创建转换器,只需指定命令,事件名称和EventArgs路径SelectedDates
。
<xuni:XuniCalendar MaxSelectionCount="-1"
Grid.Row="0"
Grid.ColumnSpan="2">
<xuni:XuniCalendar.Behaviors>
<b:EventToCommandBehavior EventName="SelectionChanging"
Command="{Binding SelectionChangingCommand}"
Path="SelectedDates" />
</xuni:XuniCalendar.Behaviors>
</xuni:XuniCalendar>
在ViewModel中,您需要使用通用的DelegateCommand来接受参数。根据{{3}}所选日期是List<DateTime>
,因此您需要在ViewModel中使用以下内容
public DelegateCommand<List<DateTime>> SelectionChangingCommand { get; }
public void OnSelectionChangingCommandExecuted(List<DateTime> selectedDates)
{
// Do stuff
}