UWP RadCalendar的Telerik UI如何使用命令

时间:2018-09-21 08:53:55

标签: uwp telerik

我不确定如何使用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方法称为ok。 如何在ViewModel中调用方法?

1 个答案:

答案 0 :(得分:0)

这是我为Teleric UWP DataGrid实现CellTap命令的方式。我不知道这是否是正确的方法,如果不是,请告知:) 首先创建一个类,并将其命名为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>