Как вы создаете на Xamarin функцию, которая делает что-то по-другому в зависимости от платформы? - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в Xamarin и разрабатываю приложение для Android, iOS и UWP. В настоящее время я хочу сделать что-то, что, к сожалению, работает по-разному на каждой платформе от ViewModel, который вызывается кроссплатформенным Xamarin.forms.

Как мне создать функцию или класс из той ViewModel, которая запускает другой код, специфичный для платформы, в зависимости от платформы, которая в данный момент строит?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Существует служба под названием DependencyService, которая позволяет регистрировать несколько реализаций интерфейса и автоматически возвращает правильную реализацию в зависимости от текущей среды.

Вы определяете интерфейс в вашем общем проекте, например ::100100

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();
}

Подробнее об этом здесь

0 голосов
/ 05 ноября 2018

Это должно быть ваше if else утверждение в вашем ViewModel классе, основанном на Platform. Вы можете добавить еще один блок else, который будет использоваться по умолчанию для UWP

if (Device.RuntimePlatform == Device.iOS)
{
    //ios
}
else if (Device.RuntimePlatform == Device.Android)
{
    //android
}

Еще один способ получить его - использовать пакет Xam.Plugin.DeviceInfo из диспетчера пакетов NuGet. Импорт

using Plugin.DeviceInfo;

Получить Platform такую ​​информацию

CrossDeviceInfo.Current.Platform.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...