2010-11-12 108 views
0

如果我在視圖上有一個標籤,我希望寬度等於同一視圖中其中一個網格中兩列的寬度,那麼如何設置不使用轉換器綁定?我應該使用屬性來預製我的計算並存儲一個值嗎?我的意圖是,如果視圖的網格大小發生變化,那麼這個標籤的大小也會改變,以匹配兩列的新寬度。wpf - 將標籤寬度綁定到計算長度屬性

我應該把這個邏輯放在哪裏?我試圖遵循MVVM模式,但是我發現很多關於「MVVM中的轉換器」的線索都說把邏輯放入視圖模型中。

我試圖用我的視圖上的依賴屬性來實現這種行爲,因爲我的viewmodel在技術上對我的視圖沒有任何知識(所以我的viewmodel如何知道我的列目前有多寬?)。這違背了我在網上閱讀的內容。當實現這種行爲時,我注意到我不能通過名稱來引用我的列,除非我的屬性不是靜態的,但依賴屬性是靜態的,所以我不知道如何在沒有創建更多屬性來保存值的情況下對我的值進行洗牌。

有人可以在這裏提供幫助嗎?我覺得我太過於複雜了。我只需要這個標籤就可以坐在這兩列之上,但是它們會拉伸。它只是提供網格中相關字段的可視化分組。一旦我能做到這一點,其他兩個應該是同樣相似的。

回答

1

我的經驗法則是,如果它是「查看」相關,然後遠離ViewModel。從你的描述中,這聽起來像是純視圖相關的,所以我只是在代碼隱藏或轉換器中使用邏輯。

現在我不明白的是爲什麼你不願意使用轉換器。使用轉換器你肯定不希望存儲會導致重構混淆或痛苦點的業務邏輯,但是如果你有一些值需要被轉換爲特定的視圖操作,那麼轉換器正是你應該使用的。

所以我的建議是轉換器...如果它是查看相關,然後隨意使用轉換器和Codebehind ...其實你應該使用它們而不是ViewModel。

這有幫助嗎?

+0

我不反對轉換器。我在一些我的第一個WPF的東西中使用它們。我一直在試圖將我的wpf應用程序方法構建爲更多的mvvm-esque方法,所以我不願意使用它們嚴格基於我讀過的有關mvvm的「最佳實踐」。就像mvvm的所有事情一樣,有很多反對的論點,使我對爲什麼仍然會使用它們有很多的瞭解。看起來每個人對mvvm的解釋都有不同的分隔界限,所以這對我來說很難選擇最適合未來的使用。 – TWood 2010-11-12 17:43:35

+0

我最終沒有使用轉換器,但一些dp和一些回調方法爲我做了我的計算。儘管它是視圖特定的,但我把它全部放在視圖中。謝謝你的輸入Chris。 – TWood 2010-11-12 19:54:11

+0

沒有問題...你做出了正確的選擇......你隨着自己感覺舒適而去。我認爲任何人都不應該因爲它是「最佳實踐」而做某些事情,之後他們不能重構或理解。很明顯,你不會做任何讓他人生活困難的事情,也不會做出阻礙可擴展性或不穩定的事情......之後就是做正確的事情。祝你好運 – 2010-11-12 23:31:56