我正在尝试使用MVVM / Commands和ControlTemplates。 我要做的事情非常简单。我想要一个人员列表,用户可以在其中触发每个人的操作。但是事件/命令处理程序不需要在人员对象上执行,例如,因为我希望通过按钮从列表中删除它。
到目前为止,我所做的是创建了一个VM,公开了PersonVM列表,其中每个都包含我的person对象。 然后我创建了一个带有控件模板的CustomControl,其中包括一个ItemsControl,用于显示我的人员。
所有数据都很好地显示出来,没有问题。
然后,我尝试添加允许用户从列表中删除人员的部分。 所以我在datatemplate中添加了一个按钮。 仍然没有问题。
接下来的步骤是公开由按钮触发的命令。
第一种方法是使用Josh Smith的RelayCommand。 因此,我将其中一个添加到PersonViewModel,并将其绑定到按钮。 它有效,但问题是我需要引发一个事件(在命令执行后),父vm必须处理该事件。 在我看来,这不好,随着越来越多的命令,代码似乎对我来说很混乱。
因此,我重新设计了一切,以使用RoutedCommand,并尝试在控件层次结构的较高级别上添加CommandBinding。 但是,由于控件模板不允许我在viewmodel上调用方法,因此这是不可能的。
因此,我想知道该问题的正确解决方案是什么? 不知为何,我认为我走错了路,但我不知道在哪里。
到目前为止,我所做的是创建了一个VM,公开了PersonVM列表,其中每个都包含我的person对象。 然后我创建了一个带有控件模板的CustomControl,其中包括一个ItemsControl,用于显示我的人员。
所有数据都很好地显示出来,没有问题。
然后,我尝试添加允许用户从列表中删除人员的部分。 所以我在datatemplate中添加了一个按钮。 仍然没有问题。
接下来的步骤是公开由按钮触发的命令。
第一种方法是使用Josh Smith的RelayCommand。 因此,我将其中一个添加到PersonViewModel,并将其绑定到按钮。 它有效,但问题是我需要引发一个事件(在命令执行后),父vm必须处理该事件。 在我看来,这不好,随着越来越多的命令,代码似乎对我来说很混乱。
因此,我重新设计了一切,以使用RoutedCommand,并尝试在控件层次结构的较高级别上添加CommandBinding。 但是,由于控件模板不允许我在viewmodel上调用方法,因此这是不可能的。
因此,我想知道该问题的正确解决方案是什么? 不知为何,我认为我走错了路,但我不知道在哪里。