2013-03-20 106 views
2

我在Text屬性中有一個帶有MultiBinding的TextBlock,而StringFormat用於連接兩個結果並添加一些內容。wpf StringFormat的問題

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1}" > 
     <Binding Path="Version" /> 
     <Binding Path="OldVersion" StringFormat="{}'({0})'" TargetNullValue=""/> 
    </MultiBinding> 
</TextBlock.Text> 

第一個StringFormat按預期工作,但第二個不適用:它返回無括號的值。我不想在第一個StringFormat中使用括號,因爲有時第二個值是Nothing。 在此先感謝。

+1

不能喲你把括號放在第一個StringFormat中? 'MultiBinding StringFormat =「{} {0}({1})」>> – 2013-03-20 17:04:25

+0

我不能說第一個,因爲第二個參數有時什麼也沒有,我想用TargetNullValue,就像我在題。 – IFink 2013-03-21 14:07:52

回答

2

當您使用MultiBindingmsdn)時,內部StringFormat將被忽略。

當您使用MultiBinding時,StringFormat屬性僅適用於在MultiBinding上設置的 。在任何子綁定對象上設置的 的StringFormat值被忽略。複合字符串格式中的參數 的數量不能超過MultiBinding中子對象的綁定數量 。

而不是MultiBinding你可以用下面的代碼:

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding Version}" /> 
    <TextBlock Text="{Binding OldVersion, StringFormat=({0}), TargetNullValue=''}" /> 
</StackPanel> 

或者你可以創建包裝屬性OldVersion屬性:

public string OldVersionEx 
{ 
    get 
    { 
     if (string.IsNullOrEmpty(OldVersion)) 
      return null; 
     else 
      return "(" + OldVersion + ")"; 
    } 
} 

在這種情況下綁定如下:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}" > 
      <Binding Path="Version" /> 
      <Binding Path="OldVersionEx"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
+0

謝謝,這是非常hekpfull – IFink 2013-03-21 14:11:21