FreshEssentials BindablePicker

时间:2017-01-23 14:33:22

标签: xamarin.forms

我在其他项目中使用过FreshEssentials BindablePicker,但是对于特定的Page / PageModel我遇到了一个非常奇怪的问题。

我已将Page和PageModel剥离到以下内容: 页:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="Manager.Pages.Config.RemoteConnectionsPage"
             xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:fe="clr-namespace:FreshEssentials;assembly=FreshEssentials">
    <ContentPage.Content>
        <StackLayout Orientation="Vertical">
            <Label HorizontalOptions="CenterAndExpand" Text="Main Page" />
            <fe:BindablePicker DisplayProperty="Name" ItemsSource="{Binding Environments}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

PageModel:

using System.Collections.Generic;
using FreshMvvm;
using PropertyChanged;

namespace Manager.PageModels.Config
{
    [ImplementPropertyChanged]
    public class RemoteConnectionsPageModel : FreshBasePageModel
    {
        public enum Environment
        {
            Live,
            Test,
            Third
        }

        public class EnvironmentPickerItem
        {
            public string Name {
                get {
                    return Env.ToString ();
                }
            }

            public Environment Env {
                get;
                set;
            }
        }
        public RemoteConnectionsPageModel ()
        {
            List<EnvironmentPickerItem> _Environments;
            _Environments = new List<EnvironmentPickerItem> ();
            _Environments.Add (new EnvironmentPickerItem () { Env = Environment.Live });
            _Environments.Add (new EnvironmentPickerItem () { Env = Environment.Test });
            _Environments.Add (new EnvironmentPickerItem () { Env = Environment.Third });
            this.Environments = _Environments;
        }

        public List<EnvironmentPickerItem> Environments {
            get;
            set;
        }
    }
}

问题是当我运行应用程序时,我得到以下异常(完全堆栈跟踪被截断):

  

System.InvalidCastException:指定的强制转换无效。     at FreshEssentials.Droid.BindablePickerRendererDroid.OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs 1[TElement] e) [0x00031] in C:\Users\Michael\Documents\FreshEssentials\src\Droid\Renderers\BindablePickerRendererDroid.cs:46 at Xamarin.Forms.Platform.Android.VisualElementRenderer 1 [TElement] .SetElement(TElement element)[0x000f4]在C:\ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin.Forms中。 Platform.Android \ VisualElementRenderer.cs:190     在X:C:\ BuildAgent3 \ work \ ca3766cfc22354a1 \ Xamarin中的Xamarin.Forms.Platform.Android.VisualElementRenderer`1 [TElement] .Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement(Xamarin.Forms.VisualElement element)[0x00027]。 Forms.Platform.Android \ VisualElementRenderer.cs:131

从FreshEssentials存储库查看BindablePickerRendererDroid的源代码,它似乎是一行:

((ObservableCollection<string>)e.NewElement.Items).CollectionChanged += RowsCollectionChanged;

在这种方法中。

protected override void OnElementChanged(ElementChangedEventArgs<BindablePicker> e)
        {
            if (e.OldElement != null)
                ((ObservableCollection<string>)e.OldElement.Items).CollectionChanged -= RowsCollectionChanged;

            if (e.NewElement != null)
            {
                ((ObservableCollection<string>)e.NewElement.Items).CollectionChanged += RowsCollectionChanged;
                if (Control == null)
                {
                    var button = new AButton(Context) { Focusable = false, Clickable = true, Tag = this, Text = e.NewElement.Title };
                    button.SetOnClickListener(PickerListener.Instance);
                    SetNativeControl(button);
                }
                UpdatePicker();
            }

            base.OnElementChanged(e);
        }

奇怪的是,将上述确切代码纳入一个全新的项目可以正常工作。我检查了FreshEssentials和FreshMVVM的版本,它们在工作和非工作项目之间是相同的。

任何人都会遇到这个和/或任何想法?

完整Xamarin Studio及其他版本信息如下:

  

=== Xamarin Studio Community ===

     

版本6.1.4(版本1)   安装UUID:462e6ba8-9cb7-4b87-acc8-9dfb0ab2c6f7   运行:     单声道4.6.2(单声道4.6.0分支/ ac9e222)(64位)     GTK + 2.24.23(罗利主题)

     

包装版本:406020016

     

=== NuGet ===

     

版本:3.4.3.0

     

=== Xamarin.Profiler ===

     

版本:0.33.2   地点:/ Applications / Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler

     

=== Xamarin.Android ===

     

版本:7.0.2.42(Xamarin Studio社区)   Android SDK:/ Users / jameslavery / Library / Developer / Xamarin / android-sdk-macosx     支持的Android版本:         2.3(API级别10)         4.0.3(API级别15)         4.1(API级别16)         4.3(API级别18)         4.4(API级别19)         5.0(API级别21)         5.1(API级别22)         6.0(API级别23)

     

SDK工具版本:24.4.1   SDK平台工具版本:23.1   SDK Build Tools版本:23.0.1

     

Java SDK:/ usr   java版&#34; 1.7.0_71&#34;   Java(TM)SE运行时环境(版本1.7.0_71-b14)   Java HotSpot(TM)64位服务器VM(内置24.71-b01,混合模式)

     

此处提供的Android Designer EPL代码:   https://github.com/xamarin/AndroidDesigner.EPL

     

=== Xamarin Android Player ===

     

版本:0.6.5   位置:/ Applications / Xamarin Android Player.app

     

=== Apple Developer Tools ===

     

Xcode 8.0(11246)   建立8A218a

     

=== Xamarin.iOS ===

     

版本:10.3.1.8(Xamarin工作室社区)   哈希:7beaef4   分支:cycle8-xi   建设日期:2016-12-20 02:58:14-0500

     

=== Xamarin.Mac ===

     

版本:2.10.0.120(Xamarin工作室社区)

     

===建立信息===

     

版本号:601040001   Git修订版:e606823f2dd01b4552216c013b597a73bec2068f   建设日期:2017-01-10 17:28:57-05   Xamarin插件:c92d0626d347aaa02839689eaac2961d24c9f446   建立车道:monodevelop-lion-cycle8

     

===操作系统===

     

Mac OS X 10.11.6   Darwin Jamess-MacBook-Pro.local 15.6.0 Darwin内核版本15.6.0       2016年4月23日星期四18:25:34       root:xnu-3248.60.10~1 / RELEASE_X86_64 x86_64

     

===启用用户安装的插件===

     

StyleCop支持1.0.1.9   大猩猩球员0.9.1.2   XamlStyler 1.0.2

0 个答案:

没有答案