如果第一个属性为“未定义”,则绑定到第二个属性

时间:2011-11-23 14:16:11

标签: wpf xaml data-binding

我不会复制/粘贴整个xaml文件。解释它的时间太长了,但这里有趣的是:我得到了一个属性“名称”的绑定

<TextBlock Text="{Binding Name}"/>

事情是,有时,我的项目没有“名称”属性。它没有崩溃,但我只是在TextBlock中有一个空文本

如果Name为空,我要做的就是绑定到“nothing”,只是{Binding}。这将显示我的对象名称,它将是完美的!

提前感谢您的任何帮助,如果这是一个noobie问题,那就很抱歉:(

4 个答案:

答案 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="" />