2017-07-20 17 views
0

私は大きな問題がありましたユーザーをバインドしようとすると、ResourceDictionaryを介してインスタンス化されたオブジェクトへの入力が行われました。ResourceDictionary内のユーザーコントロールにバインド

<ContentPage.Resources> 
    <ResourceDictionary> 
     <model:BusinessObjectsGraphDatasource x:Key="Testdata" 
               Query="query { 
                  test { 
                  id 
                  description 
                  foo 
                  } 
                 }" 

               Parameter="{Binding Source={x:Reference QueryParameterEntry}, Path=Text}"/> 

    </ResourceDictionary> 
</ContentPage.Resources> 

<StackLayout HorizontalOptions="Center" VerticalOptions="Center" Orientation="Vertical"> 
    <Entry x:Name="QueryParameterEntry"/> 

    <ListView ItemsSource="{Binding Source={x:StaticResource Testdata}, Path=Result}"/> 

</StackLayout> 

あなたが見ることができるように、私はContentPageリソース内のカスタムデータソース(BusinessObjectsGraphDatasource)オブジェクトを定義します。しかし、このデータソースは、エントリからのデータバインディングによって与えられたパラメータを処理できる必要があります。

BusinessObjectGraphDatasourceがBindableObjectから派生し、いくつかのBindableProperties(例えば、パラメータ)のPUBLISHクラスです

誰かが私にこのシナリオを処理する方法のヒントを与えることはできますか?

このアプリの特別なシナリオノート: 私はviewmodelまたはコードビハインドファイルにアクセスできません。 私ができる唯一のことは、コントロールとリソースを記述してxaml内で使用することです。


ここでの問題は、私はできるだけ早く私は、データソースへのバインドを追加すると例外「シーケンスが一致する要素が含まれていません」取得ということです。

スタックトレースは以下のようになります。

 at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate) 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.TryAddToProperty(Object element, String localName, Object value, IXmlLineInfo lineInfo, XamlServiceProvider serviceProvider, Exception& exception) 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.SetPropertyValue(Object xamlelement, XmlName propertyName, Object value, Object rootElement, INode node, HydratationContext context, IXmlLineInfo lineInfo) 
    at Xamarin.Forms.Xaml.ApplyPropertiesVisitor.Visit(ElementNode node, INode parentNode) 
    at Xamarin.Forms.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) 
    at Xamarin.Forms.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) 
    at Xamarin.Forms.Xaml.FillResourceDictionariesVisitor.Visit(ElementNode node, INode parentNode) 
    at Xamarin.Forms.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) 
    at Xamarin.Forms.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) 
    at Xamarin.Forms.Xaml.RootNode.Accept(IXamlNodeVisitor visitor, INode parentNode) 
    at Xamarin.Forms.Xaml.XamlLoader.Visit(RootNode rootnode, HydratationContext visitorContext) 
    at Xamarin.Forms.Xaml.XamlLoader.Load(Object view, String xaml) 
    at Xamarin.Forms.Xaml.XamlLoader.Load(Object view, Type callingType) 
    at Xamarin.Forms.Xaml.Extensions.LoadFromXaml[TXaml](TXaml view, Type callingType) 
    at App1.MainPage.InitializeComponent() 
    at App1.MainPage..ctor() 
    at App1.App..ctor() 
    at App1.UWP.MainPage..ctor() 
    at App1.UWP.App1_UWP_XamlTypeInfo.XamlTypeInfoProvider.Activate_4_MainPage() 
    at App1.UWP.App1_UWP_XamlTypeInfo.XamlUserType.ActivateInstance() 

バインド可能なプロパティは、そのように定義されています

public BindableProperty ParameterProperty = BindableProperty.Create("Parameter", typeof(string), 
      typeof(BusinessObjectsGraphDatasource), string.Empty, BindingMode.TwoWay, null, ParameterPropertyChanged); 

     public string Parameter 
     { 
      get => (string)GetValue(ParameterProperty); 
      set => SetValue(ParameterProperty, value); 
     } 

     private static void ParameterPropertyChanged(BindableObject bindable, object oldvalue, object newvalue) 
     { 
     } 

歓声、

クリス

+0

私はBusinessObjectsGraphDatasourceを含む背後に多くのコードを必要とする問題を再現するには、などあなたが私はあなたができない場合は、ここで –

+0

を見ることができるかもしれない単純なプロジェクトを共有することができた場合ヒントです。すべてのLINQクエリを確認します。 xamlがロードされると、そのうちの1つが例外をスローします。 First()などの使用場所を確認してください。デバッガを使用して例外をスローする行を見つけよう –

答えて

0

あなたがする必要がある場合がありますexpを指定するlicitly双方向結合する必要があること:

Parameter="{Binding Source={x:Reference QueryParameterEntry}, Path=Text, BindingMode=TwoWay}" 
+0

こんにちはJon、私はそのポイントには拘束が実行されています。私はページを表示しようとすると、 "シーケンスに一致する要素が含まれていません"という例外を取得します。 – ChrisTTian667

関連する問題