2010-03-25 37 views
0

我有兩個數據綁定的文本框。一個綁定到一個字符串,另一個綁定到一個數字。 '默認'綁定在XAML中設置。在某些情況下,我需要在運行時反轉綁定(字符串通常是前綴,但有時候是後綴)。 我在我的視圖模型下面的代碼,加載窗口時叫:在代碼中交換數據綁定

Binding stringBinding = BindingOperations.GetBinding(view.seqLeft, TextBox.TextProperty); 
Binding numberBinding = BindingOperations.GetBinding(view.seqRight, TextBox.TextProperty); 
view.seqLeft.SetBinding(TextBlock.TextProperty, numberBinding); 
view.seqRight.SetBinding(TextBlock.TextProperty, stringBinding); 

在此之後,代碼加載到的結合是指屬性。

問題是'新'綁定似乎不起作用。我錯過了什麼?有沒有更好的辦法?

+0

我的代碼唯一錯誤的是SetBinding調用中的TextBlock.TextProperty!當然,他們應該是TextBox.TextProperty,但我很久以前就混淆了它,我沒有看到樹木。 – 2010-03-25 17:10:17

+0

我們沒有看到你的問題。恭喜! – 2010-03-25 19:58:15

回答

0

我的代碼唯一出錯的是文本Block .TextProperty在SetBinding調用中!當然,他們應該已經文字 .TextProperty,但我很長時間沒有看到樹的木材。

2

我可能會考慮暴露View可以綁定到的Prefix和Suffix字符串,然後使用ViewModel中的邏輯或您使用的任何後備對象來相應地填充這些字符串。此選項整齊劃分視覺業務關注點,並簡化您必須在視圖中跟蹤的內容。

+0

視圖模型公開了字符串和整型屬性,並將控件綁定到它們。有時他們需要相反 - 可能更簡單些?視圖不必做任何事情(它只有InitializeComponent,沒有其​​他代碼)。 我發現SetBinding和ClearBinding都沒有任何影響 - 無論你做什麼原始綁定仍然存在。 我使用VS2010RC和Framework 4以防萬一它是相關的。 – 2010-03-25 16:06:00

+0

Phil,切換綁定可能是一種有效的方法,但我認爲更改數據而不是綁定是更優雅的解決方案。我認爲我們公開前綴和後綴的理念,而不是公開數字和字符串。給他自己的。 要幫助調試綁定交換問題,請嘗試檢查SetBinding的返回值以查看是否有錯誤並驗證狀態爲活動狀態。 – 2010-03-25 17:06:46

0

爲什麼猴子在綁定所有?如果您希望將文本框綁定到兩種不同的東西之一,請創建兩個文本框,將它們放在同一位置,並根據您的交換條件切換其可見性。

+0

我修復了它。交換綁定完美地工作。我曾經在Windows窗體和普通Windows代碼中使用可見性切換,但它使得窗體/視圖設計變得雜亂,我不喜歡它。 我現在完全滿意它交換綁定的效果! – 2010-03-25 17:09:17