C# 只有一些转换器着火了?

C# 只有一些转换器着火了?,c#,wpf,binding,ivalueconverter,C#,Wpf,Binding,Ivalueconverter,我在WPF的一个项目中工作,我有一个非常奇怪的案例,关于某个元素上的转换器 在以下代码段中: <myCtl:Pager IsTabStop="False" Style="{StaticResource MainPager}" DataContext="{Binding CurrentView, Converter={StaticResource SectionToPagerDriver}}" Visibility="{Bind

我在WPF的一个项目中工作,我有一个非常奇怪的案例,关于某个元素上的转换器

在以下代码段中:

<myCtl:Pager IsTabStop="False" Style="{StaticResource MainPager}"
                DataContext="{Binding CurrentView, Converter={StaticResource SectionToPagerDriver}}"
                Visibility="{Binding CurrentView, Converter={StaticResource SectionToVisibility}}"/>

“DataContext”的转换器将启动,但“Visibility”的转换器不会启动。这对我来说似乎很奇怪,因为他们都被“CurrentView”所约束,而“CurrentView”确实发生了变化。我甚至尝试过将绑定模式显式设置为“双向”,但这并不能解决问题


有人知道为什么一个绑定会启动,而另一个不会启动吗?

当您在
控件上设置
DataContext
时,所有其他绑定都将使用新对象作为源

如果您检查输出窗口,您将看到一个绑定错误,表明该属性返回的任何对象上都没有
CurrentView
属性

相反,您只需执行以下操作:

<myCtl:Pager IsTabStop="False" Style="{StaticResource MainPager}"
             DataContext="{Binding CurrentView, Converter={StaticResource SectionToPagerDriver}}"
             Visibility="{Binding Converter={StaticResource SectionToVisibility}}"/>


如果您注释掉
DataContext
部分:
DataContext=“{Binding CurrentView,Converter={StaticResource SectionToPagerDriver}}”
,是否将
SectionToVisibility
fire?将其设置为高和低test@Bolu不,它自己甚至不会开火。你说对了一半。通过删除“CurrentView”,我获得了正确的行为,但在原始案例中没有报告绑定错误。(否则我会想出来)这很奇怪。可能是因为
绑定在
DataContext
更改之前是有效的。