【发布时间】:2013-10-19 14:20:04
【问题描述】:
我有一个 TextBox,其样式有一个 DataTrigger 可以更改文本,如下所示:
<Grid>
<TextBlock Text="Foo">
<TextBlock.Style>
<Style BasedOn="{StaticResource TextStyle}" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding MyBool}" Value="True">
<Setter Property="Text" Value="Bar"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
但它不起作用,文本永远不会变为“Bar”。我已经使用另一个 TextBlock 与 Text="{Binding MyBool}" 进行了测试,并且此文本从“False”变为“True”。 Snoop 没有显示我可以看到的错误,并且输出中没有任何内容。
这个问题似乎与WPF Trigger binding to MVVM property 重复,但我的代码似乎与那里接受的答案(http://www.thejoyofcode.com/Help_Why_cant_I_use_DataTriggers_with_controls_in_WPF.aspx,“使用样式”部分)在任何相关方面都没有不同。并且按照实际答案中的建议使用 DataTemplate 似乎是错误的,因为我只希望它适用于单个 TextBlock,但如果它是正确的,我不确定如何为此编写 DataTemplate...
编辑:
这是我绑定的属性的样子:
public bool MyBool
{
get { return _myBool; }
set
{
if (_myBool== value)
return;
_myBool= value;
NotifyPropertyChanged();
}
}
private bool _myBool;
【问题讨论】:
-
您需要做的第一件事是打开数据绑定的调试消息:i.stack.imgur.com/MF8i5.png 接下来,重新运行并检查输出窗口,看看有什么错误。你可能已经这样做了;您提到 snoop 的事实表明您遥遥领先。可能还需要问题中 VM 的相关部分。
-
我会检查您的输出窗口是否有错误。这可能就像绑定被搞砸一样简单。
-
是的,正如我所提到的:“输出中没有任何内容”。绑定错误警告已启用。我将使用该属性更新主帖子...但正如我也提到的,我可以很好地绑定并显示同一属性的值,它只是在触发器中不起作用。
标签: c# wpf binding datatrigger