我需要兩部分的值轉換爲字符串,然後再返回,例如:使用多值雙向多轉換或轉換與產權
{Value = 12.0, Units = DimensionUnits.Inches}
轉換爲
"12 in"
這很簡單轉換器可以從源代碼轉換,但如果用戶不在字符串中提供單元類型,則不可能轉換回來,因此多值轉換器看起來不像我需要的解決方案。
直接轉換器參數將不起作用,因爲單位類型需要綁定,因此我研究瞭如何創建可綁定參數。創建一個可綁定的參數實際上非常簡單 - 從DependencyObject派生出來 - 但是之後你的轉換器沒有生活在可視化樹中 - 因此無法綁定任何東西 - 有兩種解決方案:
http://tomlev2.wordpress.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ http://shujaatsiddiqi.blogspot.com/2011/02/wpf-binding-converter-parameter.html
第一種方法從Freezable而不是DependencyObject派生您的Converter以允許DependencyProperties。這可以工作,並允許你在Whatever.Resources部分進行綁定,但它有非常奇怪的行爲,比如只在第一次在整個應用程序中使用綁定時才監聽綁定。
第二種方法似乎根本不起作用。當源更改時,依賴項屬性永遠不會更新。
<pf:BindingReflector Target="{Binding Source={StaticResource DistanceConverter}, Path=Units, Mode=TwoWay}"
Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=g:TestWindow, AncestorLevel=1}, Path=Units, Mode=TwoWay}"/>
有沒有人知道這個問題的解決方案,或者這是WPF的一個很大的侷限性?
1.是我原來的解決方案,但它決定在盒子內部的速記更容易立即識別,而不是隨處可見的組合框。想象一下,帶有編輯框的數據網格表示「12入」,而數據網格有2列,值爲1,單位爲1。這也有價值輸入的問題。如果用戶使用當前在「英寸」上的組合框鍵入12,然後將單位改爲「英尺」,那麼這是否意味着用戶想要1英尺或12英尺? (基本上我們應該轉換組合框更改時剛纔輸入的內容)。 – NtscCobalt
再次,這實際上只是一個小例子,我使用多值轉換器或具有依賴項屬性的轉換器。總的來說,我希望看看能否以某種方式獲得帶有可轉換轉換器參數的轉換器,而不管轉換器的具體用途如何。 – NtscCobalt