我有以下DependencyProperty
:
public bool IterationSelected
{
get { return (bool)GetValue(IterationSelectedProperty); }
set { SetValue(IterationSelectedProperty, value); }
}
public static readonly DependencyProperty IterationSelectedProperty =
DependencyProperty.Register("IterationSelected", typeof(bool),
typeof(MainMediator), new UIPropertyMetadata(false));
(这是从VS模板生成的)
然后我更新了DataTrigger
:
<Grid.Style>
<Style>
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsOpenFalseAndIsCheckedTrueMultiConverter}">
<Binding ElementName="popSelectIteration" Path="IsOpen"/>
<Binding ElementName="chkIteration" Path="IsChecked"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="loc:MainMediator.IterationSelected" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
最后,我有Grid
,其可见性取决于属性。
<Grid Visibility="{Binding IterationSelected, Converter={StaticResource BooleanToVisibilityConverter}, diagnostics:PresentationTraceSources.TraceLevel=High}" Grid.Row="1">
<TextBlock>Testing 1323</TextBlock>
</Grid>
所以,问题就在这里,我使用了diagnostics:PresentationTraceSources.TraceLevel="High"
来测试所有绑定,一切正常,只有当loc:MainMediator:IterationSelected
设置为true时,Grid
不会拾取在上面。什么都没发射。并不是它不能绑定或类似的东西。它甚至没有尝试。唯一一次Grid
绑定在应用程序启动时触发。它在那时正确地触发和评估。
我唯一尝试过(并且失败的)是使IterationSelected
附加属性而不是普通依赖属性。然而,这也失败了。
WPF大师,有什么想法吗?
答案 0 :(得分:2)
这有点难以辨别,但看起来你的绑定来源是错误的。关于属性参考似乎也有些含糊不清,但这可能是所附属性实验的人工制品。
基本上,您的Grid.Visibility绑定正在当前IterationSelected
上查找DataContext
属性。但您的样式DataTrigger
正在网格上设置loc:MainMediator
。IterationSelected
属性。
解决此问题的方法是让Grid.Visibility绑定在Grid本身(而不是loc:MainMediator
)上查找IterationSelected
。DataContext
属性。为此,请将RelativeSource={RelativeSource Self}
添加到绑定声明:
Visibility="{Binding IterationSelected,
Converter={StaticResource BooleanToVisibilityConverter},
RelativeSource={RelativeSource Self}}">
这告诉绑定要查看它绑定到的元素而不是DataContext
。
您可能还需要将路径更改为loc:MainMediator.IterationSelected
,而不仅仅是IterationSelected
。
最后,根据IterationSelected
属性是否正在执行任何其他工作,另一种方法是让您的Setter直接设置可见性:
<DataTrigger Value="True">
<!-- binding omitted -->
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
答案 1 :(得分:1)
示例中的Setter正在尝试在网格上设置IterationSelected
属性,但DP由MainMediator
类型拥有。您是否打算在MainMediator
上设置值,如果是,那么它与网格相关的位置是什么?看起来您可能实际上想要将此样式应用于MainMediator
控件,但我无法从此代码中得知。您还提到了尝试AP,它允许您在网格上设置IterationSelected
。
你能否提供一些关于你打算发生什么的更多背景信息?