Xamarin.forms FreshEssentials BindablePicker的强制转换异常无效
我在其他项目中使用过FreshEssentials BindablePicker,但在特定页面/页面模型中遇到了一个非常奇怪的问题 我将页面和页面模型精简为以下内容: 第页: 用这种方法Xamarin.forms FreshEssentials BindablePicker的强制转换异常无效,xamarin.forms,Xamarin.forms,我在其他项目中使用过FreshEssentials BindablePicker,但在特定页面/页面模型中遇到了一个非常奇怪的问题 我将页面和页面模型精简为以下内容: 第页: 用这种方法 protected override void OnElementChanged(ElementChangedEventArgs<BindablePicker> e) { if (e.OldElement != null) ((
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);
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
if(e.OldElement!=null)
((ObservableCollection)e.OldElement.Items).CollectionChanged-=RowsCollectionChanged;
if(例如NewElement!=null)
{
((ObservableCollection)e.NewElement.Items).CollectionChanged+=RowsCollectionChanged;
if(Control==null)
{
var button=newabutton(上下文){Focusable=false,Clickable=true,Tag=this,Text=e.NewElement.Title};
SetOnClickListener(PickerListener.Instance);
SetNativeControl(按钮);
}
更新Epicker();
}
基础。一个要素发生变化(e);
}
奇怪的是,将上述精确代码应用到一个全新的项目中效果很好。我已经检查了FreshEssentials和FreshMVVM的版本,它们在工作项目和非工作项目之间是相同的
有人遇到过这个问题和/或有什么想法吗
完整的Xamarin Studio和其他版本信息如下:
==Xamarin工作室社区===
版本6.1.4(版本1)
安装UUID:462e6ba8-9cb7-4b87-acc8-9dfb0ab2c6f7
运行时:
Mono 4.6.2(Mono-4.6.0-branch/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构建工具版本:23.0.1
Java SDK:/usr
java版本“1.7.0_71”
Java(TM)SE运行时环境(build 1.7.0_71-b14)
Java HotSpot(TM)64位服务器虚拟机(构建24.71-b01,混合模式)
Android Designer EPL代码可在此处获得:
==Xamarin Android播放器===
版本:0.6.5
位置:/Applications/Xamarin Android Player.app
==苹果开发者工具===
Xcode 8.0(11246)
构建8A218a
==Xamarin.iOS===
版本:10.3.1.8(Xamarin Studio社区)
哈希:7beaef4
分支机构:cycle8 xi
建造日期:2016-12-20 02:58:14-0500
==Xamarin.Mac===
版本:2.10.0.120(Xamarin Studio社区)
==生成信息===
发布ID:601040001
Git版本:e606823f2dd01b4552216c013b597a73bec2068f
建造日期:2017-01-10 17:28:57-05
Xamarin附加值:c92d0626d347aaa02839689eaac2961d24c9f446
建造车道:monodevelop-lion-cycle8
==操作系统===
Mac OS X 10.11.6
达尔文james-MacBook-Pro.local 15.6.0达尔文内核版本15.6.0
2016年6月23日星期四18:25:34 PDT
root:xnu-3248.60.10~1/RELEASE\u X86\u 64 X86\u 64
==已启用的用户安装的加载项===
StyleCop支持1.0.1.9
大猩猩玩家0.9.1.2
XamlStyler 1.0.2
查看您在FreshEssentials源代码中发布的行,它似乎需要一组
字符串
?当您绑定环境的集合时
@GeraldVersluis是的,我同意,但我发布的行在渲染器中很深,并且在内部它使用DisplayName属性创建了一个字符串集合(我假设)。有趣的是,在一个全新的项目中,使用相同的代码,这一切都很好!
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;
}
}
}
((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);
}