如何在ItemsControl中设置MouseBinding

时间:2014-11-09 16:23:38

标签: wpf mvvm

我想在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>

这不起作用,不会调用命令。怎么做?

1 个答案:

答案 0 :(得分:1)

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

ItemsControl