2012-01-20 27 views
0

我找到的所有ValueConverter示例用於創建ValueConverter實例的資源。但是我的ValueConverter使用了一些由IoC框架解決的依賴關係。所以我想將Binding Converter屬性設置爲可通過DataContext訪問的ViewModel的某些屬性。我試圖做到這一點,但得到了一個異常,告訴我不能綁定任何綁定的Converter屬性。將ValueModel屬性注入爲ValueConverter

+0

爲什麼不只是將您的DataContext中的值轉換,然後綁定到轉換後的值? – Rachel

+0

@Rachel,因爲ValueConverter從ViewModel傳遞的點創建WriteableBitmap。我想保持UI部分(WriteableBitmap)在視圖級別 – SiberianGuy

+0

您應該保持轉換器在視圖級別,因爲這就是他們的目的 - 將數據從一種類型轉換爲另一種類型的用戶界面。如果您需要轉換一個參數,請使用「IValueConverter」,但如果您有多個轉換所需的值,請使用「IMultiValueConverter」 – Rachel

回答

2

不能綁定Binding.Converter,因爲它不是一個依賴項屬性,但你可以從DependencyObject使轉換器繼承並宣佈對dependency properties代替,那麼你可以綁定的。

但請注意,您可能需要跳過一些環節才能獲得所需的結果,因爲您無法綁定到DataContext。您可能無法使用ElementName,因爲轉換器將沒有名稱範圍。一種常見的解決方法是使用Binding.Sourcex:Reference以正確的DataContext爲目標。確保不聲明在目標對象的可視化樹內實例化轉換器,否則x:Reference將引發循環依賴性錯誤(目標對象的Resources正常)。