1

使用 Xamarin 共享项目。

我试图在我的共享项目中包含来自 Xlabs 示例的 Geolocation 功能,但是在调用dependencyService 时我遇到了问题。

我有一个内容页面,在里面我的按钮有这样的命令:Command = new Command(async () => await GetPosition(), () => Geolocator != null)

命令导致:

private IGeolocator Geolocator
    {
        get
        {
            if (_geolocator == null)
            {
                _geolocator = DependencyService.Get<IGeolocator>();
                _geolocator.PositionError += OnListeningError;
                _geolocator.PositionChanged += OnPositionChanged;
            }
            return _geolocator;
        }
    }

当它应该调用_geolocator = DependencyService.Get<IGeolocator>();什么都没有发生并且 _geolocator 保持为空。

我有来自 Xlabs 的所有引用,接口 IGeolocator 在我的项目中,那么为什么不调用 DependencyService?

4

2 回答 2

4

XLabs.Platform 服务不再(自更新到 2.0)自动注册到 Xamarin.Forms.DependencyService。这是由于删除了 Xamarin.Forms 对 XLabs.Platform 的依赖。您可以手动注册地理定位器(从每个平台特定的项目):

 DependencyService.Register<Geolocator> ();

更好的选择是使用 XLabs.IoC 提供的 IoC 容器抽象(作为依赖项自动包含):https ://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC

有关 XLabs.IoC 的更多信息:http: //www.codenutz.com/autofac-ninject-tinyioc-unity-with-xamarin-forms-labs-xlabs/

于 2015-05-05T20:33:05.190 回答
1

命令构造函数的第二个参数是一个函数,它告诉命令是否可以执行,在您的情况下,您“告诉”仅在 时执行命令Geolocator is != null,但是您在命令中初始化它,因为 Geolocator 永远不会执行一片空白。

您应该在调用命令之前初始化地理定位器或删除Geolocator is != null执行命令的条件。

于 2015-05-05T19:29:13.213 回答