2011-11-23 81 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屬性的類。 –