gpt4 book ai didi

C# wpf 数据绑定(bind)命令在上下文菜单中不起作用

转载 作者:行者123 更新时间:2023-12-01 22:45:39 25 4
gpt4 key购买 nike

我正在学习 wpf 和 mvvm,我决定创建一个 Soundboard 供自己练习,到目前为止进展顺利。现在我已经制作了一个数据模板,对于程序在指定目录中找到的每个文件,它将创建一个带有文件名的按钮,我可以单击它来播放。到目前为止,一切都很好。不过,我现在尝试制作一个上下文菜单,以便当我想从列表中删除文件时,我可以右键单击并选择删除,但即使我对常规按钮具有完全相同的命令结构,该命令也不起作用。

我真的对整个RelativeSource的事情很困惑,并且已经很高兴我的常规“播放”命令在按钮中起作用了。

如果有人能指出我正确的方向,那就太好了。我真的可以对我的具体问题进行解释,因为这似乎总是比通用示例更能帮助我。我尝试阅读所有相关问题,但似乎无法从那里弄清楚。

我的项目控件:

<ItemsControl x:Name="MySounds" ItemsSource="{Binding Sounds}">

项目模板:

<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource mainButton}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.PlaySound}"
CommandParameter="{Binding Path=Tag, RelativeSource={RelativeSource Self}}"
Tag="{Binding Path=Name}">
<TextBlock Text="{Binding Path=NormalizedName}" TextWrapping="Wrap" Height="auto" />
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding Path=Name}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.RemoveSound}"
CommandParameter="{Binding Path=Tag, RelativeSource={RelativeSource Self}}">
<MenuItem.Icon>
<Image Source="\WpfPractice;component\Images\CoffeeArt.png" Width="20" VerticalAlignment="Center"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>

我的 View 模型中有一个通用的 RelayCommand,并且一切正常,问题实际上只是与绑定(bind)有关。

最佳答案

如果绑定(bind)Tag Button的属性(property)到ItemsControl ,您可以使用 PlacementTarget 绑定(bind)到命令ContextMenu的属性(property):

<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource mainButton}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.PlaySound}"
CommandParameter="{Binding Path=Name}"
Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}}">
<TextBlock Text="{Binding Path=NormalizedName}" TextWrapping="Wrap" Height="auto" />
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding Path=Name}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.Tag.DataContext.RemoveSound}"
CommandParameter="{Binding Path=Name}">
<MenuItem.Icon>
<Image Source="\WpfPractice;component\Images\CoffeeArt.png" Width="20" VerticalAlignment="Center"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>

关于C# wpf 数据绑定(bind)命令在上下文菜单中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46661772/

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