身為專業的 Xamarin 程式設計師,這些Xamarin 必學的核心功能:Renderer,相依性服務注入,事件聚合器(事件中心),可綁定屬性,附加屬性,客製控制項,使用者控制項,OnPlatform,非同步方法呼。
您都學會了嗎? ^_^
身為專業的 Xamarin 程式設計師,這些Xamarin 必學的核心功能:Renderer,相依性服務注入,事件聚合器(事件中心),可綁定屬性,附加屬性,客製控制項,使用者控制項,OnPlatform,非同步方法呼。
您都學會了嗎? ^_^
工具
> 選項
> Xamarin
> Android Settings
Java Development Kit Location
這個欄位,指向您 JDK 1.8 版本安裝的位置,例如: C:\Program Files\Java\jdk1.8.0_102工具
> Android
> Android SDK Manager
Tools
> Android SDK Tools
Tools
> Android SDK Platform-tools
Tools
> Android SDK Builder-tools
( 這裡僅需要安裝最新版本,舊的本版可以移除,不會有影響)SDK Platform
項目要安裝 ( 在這裡建議把 Android 4.4.2 (API 19) 以上的各 Android 版本內的 SDK Platform
都安裝起來 )Extras
> Android Support Repository
Extras
> Google USB Driver
// 取得 Prism 相依性服務使用到的容器
IUnityContainer fooContainer = (XFoAuth2.App.Current as PrismApplication).Container;
// 取得 IAccountStore 介面實際實作的類別物件
var fooIEventAggregator = fooContainer.Resolve<IEventAggregator>();
e.IsAuthenticated
的值內容,使用 Prism 的事件聚合器 (Event Aggregator),送出不同的事件訊息給核心 PCL 專案的訂閱者。 if (e.IsAuthenticated)
{
fooIEventAggregator.GetEvent<AuthEvent>().Publish(AuthEventEnum.身分驗證成功);
}
else
{
fooIEventAggregator.GetEvent<AuthEvent>().Publish(AuthEventEnum.身分驗證失敗);
}
public oAuthPageViewModel(INavigationService navigationService, IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_navigationService = navigationService;
// 訂閱使用者認證結果通知事件,認證成功之後,會收到 Success
fooSubscriptionToken = _eventAggregator.GetEvent<AuthEvent>().Subscribe(async x =>
{
await _navigationService.GoBackAsync();
});
}
public interface INatvieAssyFile
{
/// <summary>
/// 取得作業系統版本名稱
/// </summary>
/// <returns></returns>
string GetPlatformName();
}
NatvieAssyFile
類別,並且實作了介面 INatvieAssyFile
的功能;因為這個類別是定義在 iOS 專案內,所以方法 GetPlatformName()
就僅會回傳 iOS
這個字串。GetPlatformName()
方法,就會得到了 iOS
這個字串;當然,您需要其他原生專案內也實作出同樣的類別,並且回傳當時作業系統的文字。namespace
前面,宣告這個類別可以具備相依性服務注入的能力,在這個範例中,使用了這樣的語法 [assembly: Xamarin.Forms.Dependency(typeof(NatvieAssyFile))]
。加入了這行,您就可以在核心 PCL 專案內,使用建構式注入的方式,取得這個實作物件了。[assembly: Xamarin.Forms.Dependency(typeof(NatvieAssyFile))]
namespace XFFiles.iOS.Services
{
class NatvieAssyFile : INatvieAssyFile
{
public string GetPlatformName()
{
return "iOS";
}
}
}
INatvieAssyFile
介面變數,用來持有注入後的實作物件。INatvieAssyFile natvieAssyFile
。 private readonly INavigationService _navigationService;
private readonly INatvieAssyFile _natvieAssyFile;
#endregion
#region Constructor 建構式
public MainPageViewModel(INavigationService navigationService, INatvieAssyFile natvieAssyFile)
{
_navigationService = navigationService;
_natvieAssyFile = natvieAssyFile;
...
}
Prism Template Pack
來建立一個檢視 (View),此時,Visua Studio 除了幫您建立一個 XAML 檢視頁面之外,還會幫您一併在 ViewModels 資料夾下也建立一個檢視模型,有些時候,想要在核心 PCL 專案內或只者原生專案內,註冊一個介面與其實作類別,那麼該怎麼做呢?RegisterType
方法,不過,需要將介面與實作類別型別使用泛型方式傳入進去,這樣就完成了註冊的工作。myContainer.RegisterType<IMyClass, MyClass>();
myContainer.Resolve<IMyInterface>();
這樣的方式,取得介面 IMyInterface
的實作物件到 fooObject
內。IMyInterface fooObject = myContainer.Resolve<IMyInterface>();
IUnityContainer myContainer = (App.Current as PrismApplication).Container;
IUnityContainer
的容器物件,透過這個物件,您可以輕鬆的進行注入您所想要的相依性物件到您現在的類別方法內。Couldn't connect to logcat, GetProcessId returned: 0
這個時候,您可以使用滑鼠雙擊 Android 專案下的 Properties 項目,接著,在 Properties 視窗中,點選 Android Option
> Packaging
,請取消 Use Fast Depolyment (debug mode only)
這個選項。
Android.Support.V4.Widget.DrawerLayout.AddDrawerListener
;其實,很多時候,這是您的 Android SDK Manager 並沒有安裝與設定完全。