2015-10-21 36 views
0

我正在做一個Xamarin.Forms應用程序,我需要使用Behaviors。我已經加入了Xamarin.Forms.Behaviors包項目,並增加了一個行爲,一個頁面的XAML,所以在執行命令時的ListView變化選擇:在XAML中使用Xamarin.Forms.Behaviors會在iOS中導致TargetInvocationException,但在Android中不會導致

<b:Interaction.Behaviors> 
    <b:BehaviorCollection> 
     <b:EventToCommand Command="{Binding ItemSelectedCommand}" EventName="ItemSelected" /> 
    </b:BehaviorCollection> 
</b:Interaction.Behaviors> 

這在Android上,但工作良好在iOS下導航到同一頁面時,同一個項目會拋出TargetInvocationException。什麼可能導致這個?

回答

4

Xamarin的iOS連接器在剝離它認爲未被使用或引用的符號/類型時更爲激進;和Xamarin.Forms XAML通常是這個過程的受害者。

有兩個選項來解決這個: - 改變連接器的剝離模式(右鍵點擊Xamarin.iOS項目 - >Properties - >iOS Build選項卡 - >設置Linker behaviorLink SDK assemblies onlyDon't link)。這將確保在創建應用程序包時最少量的符號(或根本沒有)將被刪除,但缺點是應用程序大小將顯着增加。 - 創建一個手動引用這些類型的代碼文件(例如,創建未使用的實例),以免它們自動剝離。像MvvmCross use this approach這樣的庫。

後一種方法是推薦的,但它有更多的工作要做。當你使用的第三方庫有很多類型被剝離的時候,前者應該被使用,並且需要更多的工作來引用所有的類型。

相關問題