我目前正在使用 MVVM/Commands 和 ControlTemplates。我想做的很简单。我想要一个例如 Persons 的列表,用户可以在其中触发每个人的操作。但是事件/命令处理程序不需要在人员对象上执行,例如因为我想用一个按钮从列表中删除它。
所以到目前为止我所做的是创建一个 VM,它公开了一个 PersonVM 列表,并且每个都包含我的 person 对象。然后我创建了一个带有控件模板的 CustomControl,其中包含一个显示我的人员的 ItemsControl。
所有数据都显示得很好,完全没有问题。
然后我尝试添加允许用户从列表中删除人员的部分。所以我在数据模板中添加了一个按钮。仍然不是问题。
下一步是公开一个由按钮触发的命令。
第一种方法是使用 Josh Smiths RelayCommand。所以我将其中一个添加到 PersonViewModel 并将其绑定到按钮。它有效,但问题是我需要引发父虚拟机必须处理的事件(在执行命令之后)。恕我直言,这不好,因为随着越来越多的命令,代码对我来说似乎很乱。
因此,我重新设计了所有内容以使用 RoutedCommand,并尝试在控件层次结构的更高级别上添加 CommandBinding。但这是不可能的,因为 ControlTemplate 不允许我在视图模型上调用方法。
所以我想知道解决这个问题的正确方法是什么?不知何故,我相信我走错了路,但我不知道在哪里。
蒂亚·马丁