我有以下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大师,有什么想法吗?
最佳答案
这很难说,但看来您的绑定源是错误的。关于属性引用似乎也有一些歧义,但这可能是附加的属性实验的产物。
基本上,您的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直接设置Visibility:<DataTrigger Value="True">
<!-- binding omitted -->
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
关于c# - wpf-更新的依赖项属性不触发绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2115307/