CanExecute未触发

时间:2017-03-06 15:39:12

标签: c# uwp

在我的UWP中,CanExecute处理程序不会被触发。这是我的代码:

RelayCommand

EditWorkItemEntry = new RelayCommand(async () =>
{
    var diag = new EditWorkItemEntryDialog(SelectedWorkItem);
    await diag.ShowAsync();
    await ReloadWorkItems();
}, () =>
{
    return SelectedWorkItem != null;
});

使用命令的代码:

<mt:MtPage.BottomAppBar>
  <CommandBar>
    <AppBarButton Icon="Edit" x:Uid="EditWorkItemEntry" Command="{x:Bind ViewModel.EditWorkItemEntry, Mode=OneWay}" />
  </CommandBar>
</mt:MtPage.BottomAppBar>

应该触发它的代码:

<mtControls:DataGrid ItemsSource="{Binding WorkItems}" SelectedItem="{x:Bind ViewModel.SelectedWorkItem, Mode=OneWay}">
    <!-- More definition logic -->
</mtControls:DataGrid>

mtControls:DataGrid映射到MyToolkit DataGrid,可在此处找到:https://github.com/MyToolkit/MyToolkit/tree/master/src/MyToolkit.Extended/Controls/DataGrid

有没有人得到答案,为什么不调用它?

1 个答案:

答案 0 :(得分:2)

我使用GalaSoft.MvvmLight遇到了同样的问题。这是一个workarround(只需使用RelayCommand的RaiseCanExecuteChanged()函数):

private MyClass _selectedWorkItem;

public MyClass SelectedWorkItem
{
  get { return _selectedWorkItem; }
  set
  {
     _selectedWorkItem = value;
     EditWorkItemEntry.RaiseCanExecuteChanged();
  }
}

问题是CommandManager在设计中不存在于UWP应用程序中。