使用ItemsControl的工具提示不会更新DataContext更改

时间:2011-11-15 13:26:43

标签: wpf binding mvvm tooltip itemscontrol

我遇到了一些看似简单的mvvm绑定的东西。

我有一个带有工具提示的网格。 Grid的DataContext正在发生变化,应该更新textBlock中的值和放置在工具提示中的ItemsControl。问题是工具提示中的列表不会更新。只是为了测试我在文本块下面添加了相同的ItemsControl。此列表更新没有问题。这是简化的代码,只包含必要的内容(我想是这样)。

<Grid DataContext="{Binding SelectedRouting}">
    <StackPanel>
        <TextBlock Text="{Binding ActionDescription}" />
        <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
    </StackPanel>

    <Grid.ToolTip>
        <ToolTip Style="{StaticResource ActionToolTipStyle}">
            <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
        </ToolTip>
    </Grid.ToolTip>
</Grid>

问题是:为什么第一个ItemsControl(StackPanel中的那个)会在更改Main Grid DataContext时更新,而ToolTip中的第二个ItemsControl则不会更新。任何想法或解决方案?

3 个答案:

答案 0 :(得分:2)

查看answer这个问题,可能是您想要的 - WPF Tooltip does not update

此外,如果您想在工具提示中设置工具提示,您可以设置工具提示的dataContext,然后它应该可用 -

 <Grid.ToolTip>
        <ToolTip DataContext="{Binding SelectedRouting}" Style="{StaticResource ActionToolTipStyle}">
            <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
        </ToolTip>
    </Grid.ToolTip>

由于工具提示不属于Control的可视树,因此更改不会传播到它。因此,通过为工具提示设置dataContext,可以在Datacontext中对PropertyChanges进行通知。

答案 1 :(得分:1)

我最好的猜测是WPF将工具提示作为WPF中不同层的一部分读取,因此当调用PropertyChange事件时,它只会在主层上触发

尝试为ToolTip对象指定DataContext,以便收到PropertyChange通知的警报,或者尝试完全删除它

<Grid.ToolTip>
    <ToolTip DataContext={Binding RoutingActionList}" Style="{StaticResource ActionToolTipStyle}">
        <ItemsControl ItemsSource="{Binding }" ItemTemplate="{StaticResource SingleActionTemplate}"/>
    </ToolTip>
</Grid.ToolTip>

或者

<Grid.ToolTip>
    <ItemsControl ItemsSource="{Binding }" ItemTemplate="{StaticResource SingleActionTemplate}"/>
</Grid.ToolTip>

答案 2 :(得分:0)

解决方案在RV1987提供的链接中。 <ToolTip>内不能有<Grid.ToolTip>个标记,它解决了我问过的问题。 无论如何还是有一个小问题。删除标记还可以删除为ToolTip指定样式的可能性。无论您放在工具提示中,都可以看到默认边框。将样式分配给工具提示我有很好的黑暗背景。现在已经不见了:( :(关于那个的任何想法?