我的WPF使用MVVM方法 . 我正在尝试绑定我的列表控件中的2个控件
<ListBox ItemsSource="{Binding ParentDuplicate}" SelectedItem="{Binding SelectedParent, UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<ContentControl Content="{Binding}" />
<Button Content="Delete me now"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType=Window}, Path=DeleteCommand}"
CommandParameter="{Binding FilePath}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我遇到的问题是DeleteCommand没有绑定(输出窗口也告诉我)
System.Windows.Data错误:4:无法找到绑定源,引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Data.Binding',AncestorLevel ='1'' . BindingExpression:路径=的DeleteCommand;的DataItem = NULL; target元素是'Button'(Name =''); target属性是'Command'(类型'ICommand')
如果我将此按钮移动到ListBox外部,那么绑定工作并且事件触发,因此我知道问题必须与ListBox有关(我猜测问题是ItemsSource阻止绑定到除ItemsSource绑定属性之外的任何内容(在这种情况, ParentDuplicate
))
因此,在Button控件中,有2个属性被绑定, DeleteCommand
和 FilePath
这两个属性都存在于我的单个ViewModel中 . FilePath是ParentDuplicate的子代,它根据需要绑定 . 问题仅出在DeleteCommand上 . 我究竟做错了什么?
Edit
当我使用 Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType=Window}, Path=DeleteCommand}
时,它正在查看我的MainWindow代码,而不是ViewModel . 如何让它使用ViewModel?
我试过了
Command="{Binding RelativeSource={RelativeSource AncestorType=xmlnsViewModel:MainWindowViewModel}, Path=DeleteCommand}"
但是上面也会导致相同的绑定错误
1 回答
祖先搜索找到控件而不是DataContext,因此您需要告诉绑定在哪里找到DeleteCommand属性 . 如果您的ViewModel是MainWindow的DataContext,那么您可以使用: