如何在ItemsControl中设置鼠标绑定



我想在TextBlock上调用click命令,我这样做就像这个

<TextBlock Text="New Project">
    <TextBlock.InputBindings>
        <MouseBinding Command="{Binding Path=NewProject}" MouseAction="LeftClick"/>
    </TextBlock.InputBindings>
</TextBlock>

这是工作,但我想在ItemsControl中也这样做,所以

    <ItemsControl Margin="8" ItemsSource="{Binding Path=Projects}" Grid.Row="1" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <TextBlock Text="{Binding Name}" Style="{StaticResource ClickableTextBlock}" >
                        <TextBlock.InputBindings>
                            <MouseBinding Command="{Binding Path=OpenTasks}" MouseAction="LeftClick"/>
                        </TextBlock.InputBindings>
                    </TextBlock>
                </WrapPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

这不起作用,命令不被调用。如何做到这一点?

ItemTemplate内的隐式DataContext是当前数据项。但是OpenTasks不是每个数据项的一部分。正如您在评论中所说,这是您视图模型的一部分。因此,在这种情况下,您必须为绑定设置一些带有RelativeSource的显式源。它有助于沿着视觉树向上走,并针对您想要的源。在这种情况下,您需要ItemsControlDataContext。代码应该是这样的:

<MouseBinding Command="{Binding DataContext.OpenTasks,
                      RelativeSource={RelativeSource AncestorType=ItemsControl}}"
              MouseAction="LeftClick"/>

最新更新