尝试将用户输入绑定到通过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资源中定义了一个自定义Datasource(BusinessObjectsGraphDatasource)对象。但是这个数据源应该能够处理来自条目的数据绑定给出的参数。
BusinessObjectGraphDatasource是一个派生自BindableObject并发布一些BindableProperties(例如参数)的类
有人可以给我一个提示,如何处理这种情况?
此应用中的特殊情景说明: 我无法访问视图模型或代码隐藏文件。 我唯一能做的就是编写控件和资源,并在xaml中使用它们。
这里的问题是,我检索一个&#34;序列不包含匹配的元素&#34;异常,只要我将Binding添加到数据源。
堆栈跟踪看起来像这样:
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 :(得分:0)
您可能必须明确指出它应该是双向绑定:
Parameter="{Binding Source={x:Reference QueryParameterEntry}, Path=Text, BindingMode=TwoWay}"