gpt4 book ai didi

c# - 使用父级的 DataContext(WPF - 动态菜单命令绑定(bind))

转载 作者:IT王子 更新时间:2023-10-29 04:10:04 26 4
gpt4 key购买 nike

我查看了这个网站和谷歌,但解决方案对我不起作用。

我在 UserControl 的 ViewModel 上有一个命令。好吧,用户控件有一个绑定(bind)到 ObservableCollection 的 ItemsControl。在 ItemsControl.ItemTemplate 的 DataTemplate 中,我有一个按钮,我想使用该命令。我无法绑定(bind)命令,因为在 DataTemplate 中,数据上下文不是 ViewModel,而是 ObservableCollection 的一个项目。

问题是:如果丢失了父数据上下文,如何将按钮绑定(bind)到命令?

我认为这需要一个简单的解决方案,因为我认为这是一个常见问题。

想象一下这个场景:

您有一个 ListBox 项,其中一个 observableCollection 作为 ItemsSource,因此您在 ListBox 内为集合中的每个元素使用一个数据模板。好吧,您想删除选定的项目,并在该作业的每一行中放置一个按钮。 ¿你是怎么做到的?

在MVP中,我可以在按钮的点击事件中这样做:

Button but = e.Source as Button;

if (but != null)
Presenter.ActualNote = but.DataContext as Note;

简而言之。您将行(所选项目)的数据上下文发送给演示者。

但是,我怎样才能以 mvvm 的方式做到这一点?因为我需要使用命令,但我无法将命令分配给按钮,因为按钮对 ViewModel(命令所在的位置)一无所知。

如您所见,按钮必须存在于数据模板内,然后数据上下文不再是 ViewModel...。这就是为什么我需要访问父级的 DataContext 才能访问命令。

我希望你能更好地理解我的问题。

谢谢。

最佳答案

将下面的绑定(bind)用于您的按钮命令:

{Binding DataContext.CommandName, 
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type MyUserControl}}}

这将告诉它找到您的 UserControl 并使用它的 DataContext。

关于c# - 使用父级的 DataContext(WPF - 动态菜单命令绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/998092/

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