Telerik UI для UWP RadCalendar Как использовать команды - PullRequest
0 голосов
/ 21 сентября 2018

Я не уверен, как использовать команды RadCalendar для обновления свойства в моей модели представления.Я последовал этому примеру из Telreic.

https://docs.telerik.com/devtools/universal-windows-platform/controls/radcalendar/commands/celltap

Я создал класс, как указано:

  public class CustomCellTapCommand : CalendarCommand
{
    public CustomCellTapCommand()
    {
        Id = CommandId.CellTap;
    }


    public override bool CanExecute(object parameter)
    {
        CalendarCellTapContext ctx = parameter as CalendarCellTapContext;
        var date = ctx.CellModel.Date;
        if (date > DateTime.Now)
        {
            return false;
        }

        return true;
    }

    public override void Execute(object parameter)
    {
        CalendarCellModel context = parameter as CalendarCellModel;

    }
}

Вот Xaml:

<Custom:RadCalendar.Commands>
    <local:CustomCellTapCommand/>
</Custom:RadCalendar.Commands>

CanExecute и Executeметоды вызываются нормально в моем пользовательском классе.Как мне вызвать методы в ViewModel?

1 Ответ

0 голосов
/ 03 октября 2018

Вот как я реализовал команду CellTap для Teleric UWP DataGrid.Я не знаю, если это правильный путь, пожалуйста, сообщите, если это не так :) Сначала создайте класс и назовите его CellTapCmd:

public class CellTapCmd: DataGridCommand
{
    private Object _viewModel;
    public Object viewModel
    {
        get { return _viewModel; }
        set
        {
            _viewModel = value;
        }
    }
    public CellTapCmd()
    {
        this.Id = CommandId.CellTap;
    }

    public override bool CanExecute(object parameter)
    {
        var context = parameter as DataGridCellInfo;
        // put your custom logic here
        return true;
    }

    public async override void Execute(object parameter)
    {
        var context = parameter as DataGridCellInfo;
        // put your custom logic here
       await ((IGridCommand)viewModel).CellTap(context);


    }
}

Создайте интерфейс для вашей ViewModel для реализации:

interface IGridCommand
{
    Task CellTap(DataGridCellInfo cellInfo);
}

Создать свою ViewModel:

  public class AnyViewModel : ViewModelBase,IGridCommand
{
    private DataGridCommand _cellTapCmd;
    public DataGridCommand cellTapCmd
    {
        get { return _cellTapCmd; }
        set
        {
           SetProperty(ref _cellTapCmd,value);
            CellTapCmd cmd = (CellTapCmd)value;
            cmd.viewModel = this;
        }
    }

    public async Task CellTap(DataGridCellInfo cellInfo)
    {
        //do something amazing here
    }

В вас xaml:

    <telerik:RadDataGrid.Commands>
        <gridCommands:DataGridUserCommand Command="{x:Bind Path=ViewModel.cellTapCmd, Mode=TwoWay}" Id="CellTap" />
    </telerik:RadDataGrid.Commands>
...