绑定视图 - 如何从子列表中获取父属性的详细信息

Posted

技术标签:

【中文标题】绑定视图 - 如何从子列表中获取父属性的详细信息【英文标题】:Binding on the View - how to get the details of parent property from a child list 【发布时间】:2021-10-18 04:36:36 【问题描述】:

我正在使用 Xamarin 表单。

我有一个包含几个列表视图的简单视图。整个视图有一个带有视图模型的 BindingContext。视图模型类包含一个 BackgroundColor。 问题:如何从列表视图的 dataTemplate 中访问 BackgroundColor 属性。

ViewModel.cs

public class TestViewModel 
 public System.Drawing.Color BackgroundColor  get; set; 
 public List<Employee> Employees  get; set; 

上述类的一个实例为视图设置了一个BindingContext 查看.xaml

<ContextPage.... >
....
 <listview  ItemsSource="Binding Employees"...
  <DataTemplate>
    <Grid BackgroundColor="Binding BackgroundColor">

</ContentPage>

上述网格的背景不起作用,因为当前上下文现在位于 Employee 集合中。那么如何在列表视图中访问视图模型中的“BackgroundColor”。

【问题讨论】:

【参考方案1】:

Xamarin 中 Grid 控件的BackgroundColor 具有 Xamarin.Forms.Color 类型,但没有 System.Drawing.Color,因此您必须在类中更改类型。

public class TestViewModel 
 public Xamarin.Forms.Color BackgroundColor  get; set; 
 public List<Employee> Employees  get; set; 

更新:

您可以使用 RelativeSource FindAncestor 从 TestViewModel 实例中获取所需的属性。

这里例如:https://***.com/a/63713316/1979354

【讨论】:

同意,但是当我在列表视图数据模板中时如何映射该属性? .... = 除非我在存储背景颜色的员工类本身 @Peter,我已经更新了答案,当您在模板中时,您需要相对来源才能从父上下文中获取价值。 我不得不从那里调整几件事,也许您可​​以将其添加到您的答案中 Binding BackgroundColor, Source=RelativeSource AncestorType=x:Type ContentPage, Mode=FindAncestor应该是 Source=RelativeSource.. in Xamarin RelativeSource=RelativeSource AncestorType = 不起作用并且抱怨 RelativeSource 不在 BindingExtension 中 感谢伙伴获取该链接。

以上是关于绑定视图 - 如何从子列表中获取父属性的详细信息的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从子网格视图访问父列表视图项目?

我可以从子组件获取计算数据到父组件吗?

将列表框项内的命令绑定到视图模型父级上的属性

如何在 SwiftUI 中随时从子视图作为父视图访问数据?

如何使用双向数据绑定将数据从子组件传递到父组件?

访问父视图属性的最佳方式(Ionic 2、Angular 2)