2012-04-24 51 views
1

我想在歌曲的標題中合併歌曲的名稱和ID。難道是可能的,如果我有:將兩個字段合併爲一個文本內容wpf

Song 
{ 
    public string Name {get; set;} 
    public int ID {get; set;} 
} 

我想將它們綁定到一個擴展的頭。目前,只能綁定一個屬性。它是這樣的:

<Expander Foreground="#FFF4E7CA" Header="{Binding Song.Name}" FontWeight="Bold"> 
</Expander> 

但我想有些事情是這樣的:

Header = "{Binding Some.Name, Song.ID}" 

是否有可能以某種方式呢?如果是,如何?提前致謝。

回答

5

事情是這樣的:

<Expander ...> 
    <Expander.Header> 
    <TextBlock> 
     <TextBlock Text="{Binding Song.Name}"/> 
     <TextBlock Text=" "/> 
     <TextBlock Text="{Binding Sond.ID}"/> 
    </TextBlock> 
    </Expander.Header> 
    ... 
</Expander> 
+0

我試過這個,我得到了:對象只能接受一個孩子。我不能添加多個'運行'標籤 – olidev 2012-04-24 11:01:13

+0

你確定它是一個'TextBlock'而不是'TextBox'嗎? – 2012-04-24 11:13:20

+0

我忘了添加TextBlock.I只是添加了它,但我得到了另一個錯誤:不能在Run類型的Text屬性上設置綁定。 – olidev 2012-04-24 11:22:41

5

你既可以

1)在您的視圖模型公開一個新的屬性並綁定到

Song 
{ 
    public string Name {get; set;} 
    public int ID {get; set;} 
    public string Header {get { return string.Format("{0} {1}", Name, ID); } } 
} 

2)使用字符串格式的多重綁定

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Path="Song.Name"/> 
     <Binding Path="Song.Id"/> 
    </MultiBinding> 
</TextBlock.Text> 

3)如果你使用WPF4,然後Run是綁定的使用則Run會工作,所以回答有關。

+0

解決方案1我無法修改控件內部。解決方案2不適用於WPF 3.5。我無法將目標.net框架更改爲4.感謝有關解決方案的概述。它對我有很大幫助 – olidev 2012-04-24 11:48:20

+0

解決方案#2在.net 4中無效。源不是可綁定屬性。正確的代碼是 2012-08-20 13:47:42

+0

@KevinKalitowski:謝謝並修復。 – Phil 2012-08-20 17:01:33