0

同样的问题:带有 ItemsSource 的 WPF ContextMenu - 如何在每个项目中绑定到 Command?

我尝试如下实现它,但没有骰子。

目前在我的 XAML 中有:

<DataGrid.ContextMenu>
            <ContextMenu ItemsSource="{Binding Users}">
                <ContextMenu.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=UID, Converter={StaticResource UserConverter}}"/>
                    </DataTemplate>
                </ContextMenu.ItemTemplate>
                <ContextMenu.ItemContainerStyle>
                    <Style TargetType="MenuItem">
                        <Setter Property="Command" Value="{Binding ReassignFileCommand}" />
                    </Style>
                </ContextMenu.ItemContainerStyle>
            </ContextMenu>
        </DataGrid.ContextMenu>

如果我使用,命令确实有效:

            <DataGrid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Woooo" Command="{Binding ReassignFileCommand}" />
            </ContextMenu>
        </DataGrid.ContextMenu>

需要更改为(解决方案):

<Setter Property="Command" Value="{Binding Path=DataContext.ReassignFileCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
4

1 回答 1

1

MenuItem 的 DataContext 是来自 Users 集合的对应对象,而不是具有 Users 属性的对象,即 ContextMenu 的 DataContext。您的命令很可能是在该 ContextMenu 数据上下文类中实现的,因此 WPF 找不到它。可以在调试模式下的输出窗口中轻松找到此类绑定错误 (http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or- silverlight-application.aspx)

您可以通过将命令移动到用户类或将绑定更改为指向正确的类来解决此问题(通过使用 ElementName 或 RelativeSource 绑定到 contextMenu 的数据上下文)

于 2012-04-11T21:49:19.750 回答