我遇到了一些看似简单的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则不会更新。任何想法或解决方案?
答案 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指定样式的可能性。无论您放在工具提示中,都可以看到默认边框。将样式分配给工具提示我有很好的黑暗背景。现在已经不见了:( :(关于那个的任何想法?