gpt4 book ai didi

wpf - MVVM/命令和控制模板

转载 作者:行者123 更新时间:2023-12-02 02:35:37 27 4
gpt4 key购买 nike

我目前正在使用 MVVM/Commands 和 ControlTemplates。我想做的很简单。我想要一份 list ,例如人,用户可以在其中触发对他们每个人的操作。但是事件/命令处理程序不需要在人对象上执行,例如因为我想用一个按钮将它从列表中删除。

到目前为止,我所做的是创建一个 VM,该 VM 公开 PersonVM 的列表,并且每个持有我的 person 对象。然后我创建了一个带有控件模板的 CustomControl,其中包含一个显示我的人员的 ItemsControl。

所有数据都显示的很好,一点问题都没有。

然后我尝试添加允许用户从列表中删除一个人的部分。所以我在数据模板中添加了一个按钮。仍然不是问题。

下一步是公开一个由按钮触发的命令。

第一种方法是使用 Josh Smiths RelayCommand。所以我将其中一个添加到 PersonViewModel 并将其绑定(bind)到按钮。它有效,但问题是我需要引发父虚拟机必须处理的事件(在执行命令后)。恕我直言,这不太好,因为越来越多的命令让我觉得代码很乱。

所以我重新设计了一切以使用 RoutedCommand,并尝试在控件层次结构的更高级别上添加 CommandBinding。但这是不可能的,因为 ControlTemplate 不允许我在 View 模型上调用方法。

所以我想知道解决该问题的正确方法是什么?不知何故,我相信我走错了路,但我看不到哪里。

蒂亚马丁

最佳答案

我做过的一些有用的事情,如果可能有点困惑,是使用 RelativeSource 绑定(bind)来遍历 DataContext(或命令绑定(bind))备份逻辑树,a la:

Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MyCommandOnTheViewModel}"

关于wpf - MVVM/命令和控制模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1985135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com