Xamarin.forms 在DataTemplate中绑定自定义控件

Xamarin.forms 在DataTemplate中绑定自定义控件,xamarin.forms,Xamarin.forms,我在XAML中处理数据绑定问题已经有一段时间了 我以为我已经明白了,但我现在的问题清楚地表明我不是。 无论如何,问题是对于自定义控件PhotoView,{binding}对属性Persona使用的绑定上下文似乎是PhotoView的绑定上下文,而不是DataTemplate的上下文,因为它是针对下面几行的标签 如果这是WPF,我会将绑定更改为 Persona={Binding DataContext,RelativeSource={RelativeSource Mode=FindAncestor

我在XAML中处理数据绑定问题已经有一段时间了

我以为我已经明白了,但我现在的问题清楚地表明我不是。 无论如何,问题是对于自定义控件PhotoView,{binding}对属性Persona使用的绑定上下文似乎是PhotoView的绑定上下文,而不是DataTemplate的上下文,因为它是针对下面几行的标签

如果这是WPF,我会将绑定更改为

Persona={Binding DataContext,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListBoxItem}} 这可能会解决它,但这在这里不起作用相对资源显然没有定义

为什么?如何将角色绑定到DataTemplates上下文,就像标签一样?

Xamarin.Forms高达1.2.x的绑定始终使用BindableObject.BindingContext作为上下文绑定

对于templates项目,项目上下文设置为template元素(在本例中为ViewCell),并递归设置为ViewCell.View、StackLayout、您的PhotoView、内部StackLayout和2个标签

FullName和StudentIsAt.Group.Name有效的事实是一个强烈的暗示

所以,当你说

[...] for the custom control PhotoView it seems that the binding context used by 
{Binding} to the property Persona is the PhotoView's BindingContext, not the 
DataTemplate's context, [...]
这是对的,也是错的

{binding}使用的绑定上下文是PhotoView的绑定上下文,也是DataTemplate的上下文

如果绑定没有如您所期望的那样工作,可能是因为PhotoView以某种方式将BindingContext设置为该值,并阻止{Binding}按预期工作,但我不能说没有看到PhotoView的代码。

Xamarin.Forms高达1.2.x的绑定始终使用BindableObject.BindingContext作为上下文绑定

对于templates项目,项目上下文设置为template元素(在本例中为ViewCell),并递归设置为ViewCell.View、StackLayout、您的PhotoView、内部StackLayout和2个标签

FullName和StudentIsAt.Group.Name有效的事实是一个强烈的暗示

所以,当你说

[...] for the custom control PhotoView it seems that the binding context used by 
{Binding} to the property Persona is the PhotoView's BindingContext, not the 
DataTemplate's context, [...]
这是对的,也是错的

{binding}使用的绑定上下文是PhotoView的绑定上下文,也是DataTemplate的上下文


如果绑定没有如您所期望的那样工作,可能是因为PhotoView以某种方式将BindingContext设置为该值,并阻止{Binding}按预期工作,但我不能说没有看到PhotoView的代码。

如果您在viewmodel上添加属性Self{get{return this;},然后将PhotoView.Persona上的绑定更改为{绑定自}?另外..看看这个:@mrtig听起来仍然会给我一个视图模型的引用,而不是当前绑定到DataTemplate的项是的,我想你是对的。你可以在绑定集合的每个成员上尝试self属性…或者你可以在上面的链接中尝试ElementName建议。ElementName解决方案ion只生成NullPointerException。我确实先将整个ViewCell移动到它自己的控件中。如果在viewmodel上添加属性Self{get{return this;}},然后将PhotoView.Persona上的绑定更改为{binding Self},该怎么办?另外..看看这个:@mrtig听起来仍然会给我一个视图模型的引用,而不是当前绑定到DataTemplate的项是的,我想你是对的。你可以在绑定集合的每个成员上尝试self属性…或者你可以在上面的链接中尝试ElementName建议。ElementName解决方案ion只生成NullPointerException。我确实先将整个ViewCell移动到它自己的控件中。PhotoView确实设置了BindingContext,但设置为ViewModel类。我已经删除了该ViewModel,然后它就按照我的预期工作了,即与标签绑定一样。如果您对答案满意,请接受它。这可能会对其他照片视图有所帮助w确实设置了BindingContext,但设置为一个ViewModel类。我已经删除了该ViewModel,然后一切都按照我的预期进行了,即与标签绑定一样。如果您对答案满意,请接受它。这可能会对其他人有所帮助