【问题标题】:CATEL Button not running Execute Action in UserControlCATEL 按钮未在 UserControl 中运行执行操作
【发布时间】:2018-03-01 20:33:13
【问题描述】:

我有一个从 Catel 4.5 升级到 Catel 5.3 的 WPF 应用程序。我有许多用于数据输入和编辑的用户控件。我在用户控件的顶部有一个添加按钮和一个数据网格,其中的行包括一个编辑和删除按钮。所有三个按钮都使用自定义图像按钮。当我运行应用程序并加载用户控件视图/视图模型时,调试显示找到了 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 在具有唯一标识符“3”的视图模型“CaddRemoteJobManager.ViewModels.ProjectsViewModel”上注册命令 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 在视图模型“ProjectsViewModel”上找到命令“DeleteProject” 14:33:11:507 => [DEBUG] [Catel.MVVM.ViewModelCommandManager] 1 在具有唯一标识符“3”的视图模型“CaddRemoteJobManager.ViewModels.ProjectsViewModel”上注册的命令

当我单击添加按钮时,执行操作永远不会运行。当我在 DataGrid 中选择 Edit 或 Delete 按钮时,将运行 Execute 操作。

按钮初始化如下...

  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);
}

知道为什么 Edit 和 Delete 按钮在 DataGrid 中起作用,但在 UserControl 级别的 Add 按钮不起作用。我的编辑视图中的保存和取消按钮也有同样的问题。它们也位于视图的顶层。

enter image description here

【问题讨论】:

    标签: user-controls action execute catel


    【解决方案1】:
    1. 不确定您是否使用“正确”的 Catel。您应该必须手动创建视图模型(就像您在命令中所做的那样)。

    2. 您是否检查了输出窗口中是否存在绑定错误?我无权访问整个 xaml,但我的直觉告诉我您没有绑定到添加按钮内的正确 DataContext。

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      相关资源
      最近更新 更多