我是Xamarin的新手,并且正在为Android,iOS和UWP开发一个应用程序。目前,我想做的事情不幸的是,在跨平台Xamarin.forms调用的ViewModel上,每个平台上的工作方式都不同。
如何根据该ViewModel创建一个函数或类,该函数或类根据当前构建的平台运行不同的Platform特定代码?
答案 0 :(得分:4)
有一个名为DependencyService
的服务,该服务可让您注册接口的多个实现,并根据当前环境自动返回正确的实现。
您在普通项目中定义界面,例如:
public interface IPrinter
{
void Print();
}
然后在每个项目中创建不同的实现。您还必须使用[assembly(typeof(YOUR_CLASS_NAME))]
属性对其进行标记。
[assembly:Dependency(typeof(AndroidPrinter))]
namespace MyApp.Android
{
public class AndroidPrinter : IPrinter
{
public class Print()
{
}
}
}
然后在您的普通项目的ViewModel中,您可以调用:
public void ViewModelFooMethod()
{
DependencyService.Get<IPrinter>().Print();
}
有关它的更多信息here
答案 1 :(得分:1)
这应该是您基于if
的{{1}}类中的else
ViewModel
语句。您可以附加一个Platform
默认的else
块
UWP
还有一种获取方法是使用NuGet软件包管理器中的 Xam.Plugin.DeviceInfo 软件包。导入
if (Device.RuntimePlatform == Device.iOS)
{
//ios
}
else if (Device.RuntimePlatform == Device.Android)
{
//android
}
获取using Plugin.DeviceInfo;
信息
Platform