2013-04-12 115 views
0

我想的TextBlock的Text屬性綁定到一些元素,有些模型的屬性。事情是這樣的:WPF TextBlock的MultiBinding

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding> 
      <Binding ElementName="myElement1" Mode="OneWay" Path="Text" /> 
      <Binding ElementName="myElement2" Mode="OneWay" Path="Text" /> 
      <Binding Mode="OneWay" Path="Property1" /> 
      <Binding Mode="OneWay" Path="Property2" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

的TextBlock;具有文本價值,myElement1,myElement2和Property1,Property2的組合。沒有問題。文本值已成功生成。

這裏是我的問題:

我可以綁定TextBlock的另一個模型財產的整個(合併)的文本值,即Property3,無碼?

+1

我不認爲你應該,如果你的使用MVVM自己編程到這種情況。視圖模型應該公開並綁定到這些項目的單獨,而不是依賴視圖來提供它連接的數據。該視圖應該使用MultiBinding來以各種格式「呈現」數據,但將數據放在一起並將其返回給視圖模型不同。在視圖不再僅僅是數據展示者的這種實現中,責任分離就失去了。 – Viv

+0

是完全同意維夫 - 這是不是你希望你的觀點是做什麼 - 模型應該公開的連接數據作爲屬性如果需要的話,多數民衆贊成(而不是在一個約反過來從視圖中得到它)。 – Ricibob

回答

0

沒有一些非常糟糕的黑客這需要編寫一些代碼來設置附加屬性和其他綁定反正。問題是任何綁定都有兩個目標:目標和源。由於目標(設置綁定的位置)必須是DependencyProperty,這意味着您的模型必須位於您嘗試執行的綁定的源端。由於TwoWay和OneWayToSource綁定可以很好地設置值,所以這不是問題。

雖然在當值從(TextBlock.Text)來已經是原來的地方被分配一個綁定,因此不能成爲你的模型綁定目標你有一個更大的問題。接下來您可能想嘗試使用另一個UIElement屬性作爲中介,以獲取Text值並將其推送到模型。要做到這一點,您需要再次使用該模型作爲源,並將其他UIElement屬性作爲目標。但是,同樣的屬性也需要成爲綁定到原始文本屬性的目標,您正試圖提取,所以再次陷入困境。

底線是,你好得多你的模型和視圖模型層處理這個,而不是試圖迫使你在XAML成立了東西要駕駛的一切。

+0

謝謝大家。我以爲同樣的事情,但我問,因爲「可能」有一種方法。我通過在http put/http post請求之前將字段分配給TextBlock的text屬性來解決這個問題。 – kizanlik