CATEL按钮未运行UserControl中的执行操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CATEL按钮未运行UserControl中的执行操作相关的知识,希望对你有一定的参考价值。

我有一个WPF应用程序,我从Catel 4.5升级到Catel 5.3。我有许多UserControls用于我的数据输入和编辑。我在usercontrol顶部有一个Add按钮和一个包含Edit和Delete按钮的行的datagrid。所有三个按钮都使用自定义图像按钮。当我运行应用程序并加载usercontrol视图/ viewmodel时,调试显示找到3个命令。

14:33:11:499 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1取消注册视图模型'CaddRemoteJobManager.ViewModels.ProjectsViewModel'上的命令,其唯一标识符为'3'14:33:11:501 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1视图模型'CaddRemoteJobManager.ViewModels.ProjectsViewModel'上的未注册命令,具有唯一标识符'3'14:33:11:502 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1在视图上注册命令模型'CaddRemoteJobManager.ViewModels.ProjectsViewModel'具有唯一标识符'3'14:33:11:503 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1在视图模型'ProjectsViewModel'上找到命令'AddProject'14:33:11 :504 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1在视图模型'ProjectsViewModel上找到命令'EditProject'14:33:11:505 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1找到命令'DeleteProject 'on view model'Projects.Model'14:33:11:507 => [DEBUG] [Catel.MVVM.ViewMo delCommandManager] 1在视图模型“CaddRemoteJobManager.ViewModels.ProjectsViewModel”上注册了具有唯一标识符“3”的命令

单击“添加”按钮时,“执行”操作永远不会运行。当我在DataGrid中选择“编辑”或“删除”按钮时,将运行“执行”操作。

按钮初始化如下...

  AddProject = new Command(OnAddProjectExecute, null, "AddProject");
  EditProject = new Command(OnEditProjectExecute, null, "EditProject");
  DeleteProject = new Command(OnDeleteProjectExecute, null, "DeleteProject");

这是添加按钮的XAML

      <controls:ImageButton Image="../Images/Add-32x32-32.png"
                        Command="{Binding AddProject}"
                        ImageHeight="32" ImageWidth="32"
                        Height="50" Width="Auto"
                        Content="Add" HorizontalContentAlignment="Left"
                        ToolTip="Add a new project">
  </controls:ImageButton>

这是“添加”按钮的“执行”操作...

private void OnAddProjectExecute()
{
  var vm = TypeFactory.Default.CreateInstance<AddEditProjectViewModel>();
  vm.Project = new Project(string.Empty, string.Empty, string.Empty);
  MainWindowViewModel.GetViewModel().SelectedControl = new AddEditProjectView(vm);
}

这是编辑按钮的XAML

              <controls:ImageButton Image="../Images/Edit-16x16-32.png"
                                  Command="{Binding DataContext.EditProject, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
                                  ImageHeight="16" ImageWidth="16"
                                  Margin="-7"
                                  Height="32" Width="32" ToolTip="Edit the selected project"/>

这是“编辑”按钮的“执行”操作...

    private async void OnEditProjectExecute()
{
  var vm = TypeFactory.Default.CreateInstance<AddEditProjectViewModel>();
  vm.Project = SelectedProject;
  MainWindowViewModel.GetViewModel().SelectedControl = new AddEditProjectView(vm);
}

知道为什么编辑和删除按钮在DataGrid中工作,但UserControl级别的Add按钮不工作。编辑视图中的“保存”和“取消”按钮存在同样的问题。他们也处于观点的顶层。

enter image description here

答案
  1. 不确定你是否正在使用Catel“正确”。您必须手动创建视图模型(就像在命令中一样)。
  2. 您是否检查输出窗口中是否存在绑定错误?我没有访问整个xaml,但我的胆量告诉我你没有绑定到添加按钮内的正确DataContext。

以上是关于CATEL按钮未运行UserControl中的执行操作的主要内容,如果未能解决你的问题,请参考以下文章

DataWindowButton CanExecute 未触发,Catel 4.0

使用控件时未加载 UserControl 中的外部图像

Catel WPF 延迟验证

Catel 中的嵌套验证

如何从视图模型中关闭 Catel 框架数据窗口

winRT catel 示例无法运行