将Xuni Calendar SelectionChanging事件绑定到ViewModel(Xamarin Forms with Prism)

时间:2017-05-19 05:23:24

标签: xaml xamarin mvvm xamarin.forms prism

我想在我的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未被触发。

谢谢, 乌韦

1 个答案:

答案 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
}