我想在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
的显式源。它有助于沿着视觉树向上走,并针对您想要的源。在这种情况下,您需要ItemsControl
的DataContext
。代码应该是这样的:
<MouseBinding Command="{Binding DataContext.OpenTasks,
RelativeSource={RelativeSource AncestorType=ItemsControl}}"
MouseAction="LeftClick"/>