我正在使用MvvmCross和Xamarin.Android。我安裝了可見性插件。在我的Android應用程序的項目,我創建了支持隱形狀態(圖中未示出,但仍佔據佈局空間)的Android相關的可視性轉換器:未調用MvvmCross,特定於平臺的值轉換器
public class VisibleOrInvisibleValueConverter
: MvxValueConverter<bool, ViewStates>
{
public ViewStates Convert(bool value, Type targetType, CultureInfo cultureInfo, object parameter)
{
MvxTrace.Error("VisibleOrInvisibleValueConverter.Convert");
return value ? ViewStates.Visible : ViewStates.Invisible;
}
}
在我.axml的標記,我用這個轉換器像這樣:
<FrameLayout
android:layout_width="0dip"
android:layout_height="5dip"
android:layout_weight="1"
android:background="#ff0000"
local:MvxBind="Visibility Selected, Converter=VisibleOrInvisible, FallbackValue=0" />
設在https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#referencing-value-converters-in-touch-and-droid的文件上,我相信MvvmCross會自動發現這個值轉換器的存在,因爲它是我的UI項目。
在運行時,無論Selected的值是什麼,綁定值總是具有回退值。根據https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#referencing-value-converters-in-touch-and-droid的文檔,這意味着我的綁定源路徑丟失,或值轉換器引發異常。
不幸的是,我認爲我可以統治這兩者。對於第一種可能性,我嘗試用庫存MvvmCross Visibility轉換器替換我的自定義VisibleOrInvisible轉換器,並且它工作正常。 (也就是說,綁定工作正常,但股票可見性轉換器不支持我想要的行爲,但無論如何,我認爲這表明源路徑(Selected)確實存在。
對於第二種可能性,我在VisibleOrInvisible轉換器的Convert函數中設置了一個斷點,它永遠不會執行。我還在那裏添加了一個MvxTrace調用,並且我從來沒有看到跟蹤消息。
雖然我的轉換器應該可以自動發現,我自己也嘗試顯式的增加我的具體平臺組裝到通過重寫Setup.cs的ValueConverterAssemblies屬性getter實現價值轉換器組件列表:
protected override List<Assembly> ValueConverterAssemblies
{
get
{
var toReturn = base.ValueConverterAssemblies;
toReturn.Add(typeof (VisibleOrInvisibleValueConverter).Assembly);
return toReturn;
}
}
但這沒有幫助。
我認爲MvvmCross發現我的轉換器OK。如果我有意在我的.axml文件中引用不存在的轉換器,我會在運行時的調試跟蹤中看到異常消息。但是,當我指定我的VisibleOrInvisible轉換器時,這些消息不會出現。
我的工作理論是,在執行轉換器的代碼的唯一代碼行之前,在調用我的轉換器的過程中發生異常。但我不知道如何去做到底。調試跟蹤中不會出現異常消息。
是不是有一個簡單的步驟,我錯了?我非常仔細地研究了MvvmCross ValueConversion示例,並且我認爲我正在做所有示例。
哇,這是驚人的如何可以是盲目的事情。我必須從任何地方塊複製我的非覆蓋,不同參數順序Convert函數,但它不是來自任何您的示例。這確實解決了我的問題,謝謝。 .axml中的整數後備值來自之前的實驗,我試圖將非枚舉類型用作轉換器的目標類型。我的意思是它是無形的價值。 –