2011-11-23 83 views
6

我不会复制/粘贴我的整个xaml文件。这将是太多时间去解释,但在这里是什么有趣的是:我有一个结合的性质“名称”如果第一个属性为“未定义”,则绑定到第二个属性

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

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

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

预先感谢任何帮助,对不起,如果它是一个noobie问题:(

回答

6

你想要的这里是PriorityBinding

特别是,它看起来是这样的(确切的语法可能需要一些验证):

  <TextBlock> 
      <TextBlock.Text> 
       <PriorityBinding> 
        <Binding Path="Name"/> 
        <Binding /> 
       </PriorityBinding> 
      </TextBlock.Text> 
     </TextBlock> 

注意,这个专门回落时Name属性不可用对象的约束上;如果Name属性具有空字符串值,我相信它仍将使用该空值。

+0

不被接受,但你的解决方案的声音太好了! –

+0

尝试: <绑定路径= “名称”/>

+1

@Guillaume,迪伦编辑它,以显示完整的语法;一般来说,''是XAML语法,用于设置具有更复杂结构的属性值,而不是内联值。 '{Binding ...}'标记扩展只是创建这些'Binding'类实例的快捷方式。然后XAML编译器做一些额外的特殊魔法来实现Text是一个DependencyProperty,所​​以它允许将值'设置'为Binding,它通过调用连接所需的各种BindingOperations函数来处理它。 –

0

如果没有绑定,你可以使用TargetNullValue对象类型名称,这将给你如果缺省值绑定属性为null,这样的:

<TextBlock Text="{Binding Name, TargetNullValue=Default}" /> 

如果你真的想要的对象类型的名字,我会建议写一个转换器(实现的IValueConverter)让我知道如果你想有一个样品转换器

+0

有了你的代码,当我的对象没有任何Name属性时,我仍然有空的TextBlocks。不知道它是否有意或无意。关于转换器,我真的不知道,我似乎很惊讶,我们不只是在xaml文件中做! –

+0

在这种情况下,属性绑定将失败,因此TargetNullValue永远不会被使用。如果您无法绑定到目标,则不能为目标设置空值。 –

+0

对不起,我不明白,财产失踪,我只是认为它是空的(“如果名称是空的”)。我的错。 –

0

此。是理论上的但是..

我会创建一个自定义样式并定位所有的文本块。在你的风格中,你可以设置一个默认的文本值。如果您的绑定不覆盖样式,则将使用您的默认值。

Style x:Key="TwitterTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="Text" Value="" /> 
+0

我想要默认值是另一个绑定,而不是一个静态值:( –

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> 
+0

似乎工作,但我必须知道的东西,当我只使用{绑定}。该字段绑定到什么属性? –

+0

@Guillaume, '{Binding}'意味着使用当前DataContext的值作为分配给属性的值,换句话说,一个空的Path意味着只使用对象实例本身,而不是它的一个属性。下面是一个方便的备忘单绑定语法:http://www.nbdtech.com/Free/WpfBinding.pdf –

+1

@GuillaumeCogranne {绑定}将绑定到您当前的数据上下文设置为。因此,不是绑定到类的Name属性,而是绑定到包含Name属性的类。 –