2017-10-27 13 views
1

私は非常に基本的なクロスプラットフォームアプリケーションを持っています。このソリューションには、アプリインジェクション用のPCLとAndroidアプリが含まれています。Xamarin.Formsカスタムコントロールでスローされるシーケンス例外

マイMainPage.xamlを:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:Crossplatform.app" 
      xmlns:dragonfly="clr-namespace:Crossplatform.control;assembly=Crossplatform.control" 
      x:Class="Crossplatform.app.MainPage"> 
    <ContentPage.Content> 

     <dragonfly:Wizard DataItem="{Binding WizardData}" /> 

    </ContentPage.Content> 
</ContentPage> 

MainPage.xaml.cs

public partial class MainPage : ContentPage 
{ 
    private string wizarddata; 
    public string WizardData 
    { 
     get { return wizarddata; } 
     set { wizarddata = value; } 
    } 

    public MainPage() 
    { 
     InitializeComponent(); 

     WizardData = "Hello from ViewModel"; 
    } 
} 

このすべてがやっているが、私は、カスタムコントロールのBindablePropertyに割り当てる文字列プロパティを定義しています。

カスタム制御コード:ここでクレイジー

public class Wizard : StackLayout 
{ 
    public static readonly BindableProperty DataContextProperty = 
     BindableProperty.Create(
      propertyName: nameof(DataItem), 
      returnType: typeof(string), 
      declaringType: typeof(Wizard), 
      defaultValue: "Show Me", 
      defaultBindingMode: BindingMode.TwoWay, 
      validateValue: null, 
      propertyChanged: OnDataContextPropertyChanged); 

    public string DataItem 
    { 
     get 
     { 
      return (string)GetValue(DataContextProperty); 
     } 
     set 
     { 
      SetValue(DataContextProperty, value); 
     } 
    } 

    public Wizard() 
    { 

    } 

    static void OnDataContextPropertyChanged(BindableObject obj, object oldvalue, object newvalue) 
    { 
     ; 
    } 
} 

何もありません。私がしているのは、DataContextPropertyというバインド可能なプロパティを定義し、このプロパティを使用してDataItemプロパティの変更を通知します(上記のmain.xamlごとに)。

コードが正常にWizardコントロールのためのctorのを打つが、フォールスルーとシーケンスの例外は、以下のスタックトレースとAndroidのMainActivityに失敗しました。

私は最後の4時間のためにこれをデバッグされていると、それは与えられたスタックに失敗している理由を見ることができません。

私はここにいると確信しているので、どんな助力も大変ありがたいです。完全に有効です。

スタックトレース:

at System.Linq.Enumerable.First[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] predicate) [0x00011] in <b5bd9d990a0b4733885e90ca5ec6c0fb>:0 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.TryAddToProperty (System.Object element, System.String localName, System.Object value, System.Xml.IXmlLineInfo lineInfo, Xamarin.Forms.Xaml.Internals.XamlServiceProvider serviceProvider, System.Exception& exception) [0x0005d] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\ApplyPropertiesVisitor.cs:510 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.SetPropertyValue (System.Object xamlelement, Xamarin.Forms.Xaml.XmlName propertyName, System.Object value, System.Object rootElement, Xamarin.Forms.Xaml.INode node, Xamarin.Forms.Xaml.HydratationContext context, System.Xml.IXmlLineInfo lineInfo) [0x000a2] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\ApplyPropertiesVisitor.cs:334 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.Visit (Xamarin.Forms.Xaml.ElementNode node, Xamarin.Forms.Xaml.INode parentNode) [0x00152] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\ApplyPropertiesVisitor.cs:124 
    at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x000ab] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlNode.cs:149 
    at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00043] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlNode.cs:143 
    at Xamarin.Forms.Xaml.RootNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00043] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlNode.cs:201 
    at Xamarin.Forms.Xaml.XamlLoader.Visit (Xamarin.Forms.Xaml.RootNode rootnode, Xamarin.Forms.Xaml.HydratationContext visitorContext) [0x0007b] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlLoader.cs:141 
    at Xamarin.Forms.Xaml.XamlLoader.Load (System.Object view, System.String xaml) [0x0004b] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlLoader.cs:89 
    at Xamarin.Forms.Xaml.XamlLoader.Load (System.Object view, System.Type callingType) [0x0002f] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\XamlLoader.cs:68 
    at Xamarin.Forms.Xaml.Extensions.LoadFromXaml[TXaml] (TXaml view, System.Type callingType) [0x00000] in C:\agent\_work\3\s\Xamarin.Forms.Xaml\ViewExtensions.cs:36 
    at Crossplatform.app.MainPage.InitializeComponent() [0x00001] in C:\repos\Crossplatform.app\Crossplatform.app\Crossplatform.app\obj\Debug\Crossplatform.app.MainPage.xaml.g.cs:19 
    at Crossplatform.app.MainPage..ctor() [0x00008] in C:\repos\Crossplatform.app\Crossplatform.app\Crossplatform.app\MainPage.xaml.cs:21 
    at Crossplatform.app.App..ctor() [0x0000f] in C:\repos\Crossplatform.app\Crossplatform.app\Crossplatform.app\App.xaml.cs:16 
    at Crossplatform.app.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x00028] in C:\repos\Crossplatform.app\Crossplatform.app\Crossplatform.app.Android\MainActivity.cs:25 
+0

この行をMainPageのctorに追加することができます。 'this.BindingContext = this; ' –

答えて

1

コードが正常にWizardコントロールのためのctorのを打つが、フォールスルーとシーケンスの例外は、以下のスタックトレースとAndroidのMainActivityに失敗しました。

私は最後の4時間のためにこれをデバッグされていると、それは与えられたスタックに失敗している理由を見ることができません。

異なるXamlプロパティ名(DataContextProperty)を持つパブリックプロパティ(DataItem)が定義されているため、この例外は発生していますが、これは許可されていません。

は、問題を修正するには、 DataItemPropertyDataContextPropertyを変更する必要があります。

関連する問題