我在这个网站和谷歌上搜索了解决方案,但都不适用于我的情况。
我有一个UserControl的ViewModel命令。 用户控件具有绑定到ObservableCollection的ItemsControl。在ItemsControl.ItemTemplate的DataTemplate中,我有一个按钮,我想使用该命令。我无法绑定命令,因为在DataTemplate中,DataContext不是ViewModel,而是ObservableCollection的一个项目。
问题是:如果丢失父数据上下文,如何将按钮绑定到命令?
我认为这需要一个简单的解决方案,因为我认为这是一个常见的问题。
想象一下这种情况:
你有一个ListBox项,其中observableCollection是ItemsSource,因此你正在使用ListBox中的datatemplate来处理集合中的每个元素。好的,你想删除所选项目,并在每行中放置一个按钮以执行此操作。你如何做到这一点?
在MVP中,我可以在按钮的click事件中实现:
Button but = e.Source as Button;
if (but != null)
Presenter.ActualNote = but.DataContext as Note;
简单来说,您需要将行(即所选项)的数据上下文发送给Presenter。但是,我该如何使用mvvm方式呢?因为我需要使用命令,但我无法将命令分配给按钮,因为按钮不知道ViewModel(其中命令存在)的存在。正如您所看到的,按钮必须存在于DataTemplate中,那么DataContext就不再是ViewModel了...这就是为什么我需要访问父级的DataContext以访问命令的原因。希望您能更好地理解我的问题。谢谢。
ElementName
的方法失败了。 - SörenCommandParameter="{Binding Path=.}"
这种方式可以使参数对象成为控件的上下文。 - Simon Mattes