gpt4 book ai didi

c# - 无法在列表框中绑定(bind)命令

转载 作者:行者123 更新时间:2023-12-03 10:59:35 26 4
gpt4 key购买 nike

我的 WPF 使用 MVVM 方法。我正在尝试在我的列表控件中绑定(bind) 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 没有绑定(bind)(输出窗口也通知我)

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Data.Binding', AncestorLevel='1''. BindingExpression:Path=DeleteCommand; DataItem=null; target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')



如果我将此按钮移到 ListBox 外部,则绑定(bind)有效并且事件触发,所以我知道问题一定出在 ListBox 上(我猜问题是 ItemsSource 阻止绑定(bind)到除了 ItemsSource 绑定(bind)属性之外的任何东西(在这种情况下, ParentDuplicate))

因此,在 Button 控件中,绑定(bind)了 2 个属性, DeleteCommandFilePath
这两个属性都存在于我的单个 ViewModel 中。 FilePath 是 ParentDuplicate 的子节点,它可以根据需要进行绑定(bind)。问题仅在于 DeleteCommand。我究竟做错了什么?

编辑

当我使用 Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType=Window}, Path=DeleteCommand}它正在查看我后面的 MainWindow 代码,而不是 ViewModel。如何让它使用 ViewModel?

我试过
Command="{Binding RelativeSource={RelativeSource  AncestorType=xmlnsViewModel:MainWindowViewModel}, Path=DeleteCommand}" 

但以上也会导致相同的绑定(bind)错误

最佳答案

祖先搜索找到的是控件,而不是 DataContext,因此您需要告诉绑定(bind)在哪里可以找到 DeleteCommand 属性。如果您的 ViewModel 是 MainWindow 的 DataContext 那么您可以使用:

<Button Content="Delete me now" 
Command="{Binding RelativeSource={RelativeSource
Mode=FindAncestor, AncestorLevel=1, AncestorType=Window},
Path=DataContext.DeleteCommand}"
CommandParameter="{Binding FilePath}" />

关于c# - 无法在列表框中绑定(bind)命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20523347/

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