我不会复制/粘贴整个xaml文件。解释它的时间太长了,但这里有趣的是:我得到了一个属性“名称”的绑定
<TextBlock Text="{Binding Name}"/>
事情是,有时,我的项目没有“名称”属性。它没有崩溃,但我只是在TextBlock中有一个空文本
如果Name为空,我要做的就是绑定到“nothing”,只是{Binding}。这将显示我的对象名称,它将是完美的!
提前感谢您的任何帮助,如果这是一个noobie问题,那就很抱歉:(
答案 0 :(得分:7)
您想要的是PriorityBinding。
特别是,它看起来像(确切的语法可能需要一些验证):
<TextBlock>
<TextBlock.Text>
<PriorityBinding>
<Binding Path="Name"/>
<Binding />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
请注意,当Name属性在绑定的对象上不可用时,这会特别回退;如果Name属性具有空字符串值,我相信它仍将使用该空值。
答案 1 :(得分:3)
您可以使用DataTrigger
:
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Name}"/>
<Style.Triggers>
<!-- In this binding you could inject a converter which checks for more than null -->
<DataTrigger Binding="{Binding Name}" Value="{x:Null}">
<Setter Property="Text" Value="{Binding}"/>
</DataTrigger>
<Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
答案 2 :(得分:0)
如果您不必绑定到对象类型名称,则可以使用TargetNullValue,如果bound属性为null,它将为您提供默认值,如下所示:
<TextBlock Text="{Binding Name, TargetNullValue=Default}" />
如果你真的想要对象类型名称,我建议你写一个转换器(实现IValueConverter)。如果您想要一个样本转换器,请告诉我。
答案 3 :(得分:0)
这是理论上的但是......
我会创建一个自定义样式并定位所有文本块。在您的风格中,您可以设置默认文本值。如果您的绑定未覆盖该样式,则将使用您的默认值。
Style x:Key="TwitterTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="" />