绑定情况下的ItemsSource与DataContext

ItemsSource vs DataContext in binding case(绑定情况下的ItemsSource与DataContext)
本文介绍了绑定情况下的ItemsSource与DataContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的主要问题是关于一个控件有多个源(DataGrid中的组合框)(或同时具有datacontext和itemssource)场景中的绑定情况。那么我们如何知道绑定将使用哪个源呢?(澄清这一点的任何语法) 假设数据网格有一个itemssource="球员列表"datacontext="Manager" ,并且有一个组合框作为一种列。我们还假设每个玩家都有一个集合类型的库存属性。

然后在datagrid.column中:

  1. 每个列(用于绑定)的当前源是一个播放器(到目前为止我是这么理解的)。我们只能绑定到播放器的属性,而不能绑定到datacontext"manager"的属性。无法绑定到"Manager"的属性。我说的对吗?
  2. 但是,如果我们移动到combobox列,那么假设我让combobox的itemssource=‘Player’s Inventory‘,那么comboxItem的当前源将是库存中的每个项目。如果我使用绑定,它只能绑定到这些项的属性。 但是,有时我会看到代码,我们还可以在组合框的属性中将其绑定到播放器的属性,特别是SelectedItem和SelectedItem。我这里有点困惑 你能帮我吗?

谢谢您

推荐答案

要考虑的关键控件是ItemsControl(ComboBox继承自ItemsControlDataGrid的行为非常相似)。

ANItemsControl具有ItemsSource类型的IEnumerable属性。它还具有ItemTemplate属性。它将执行的操作是ItemsSource中的每个项目创建其ItemTemplate的一个副本。ItemTemplateDataContext将是ItemsSource中的每一项。

对于ComboBoxDataGrid列的DataContext将是您的Player对象。如果将ComboBoxItemSource绑定到Player的库存,则将获得ComboBox列表中的每一项。
需要注意的是,ComboBox本身的DataContext没有变化。它仍然是Player对象。如果您为ComboBox指定ItemTemplate,则DataContext将成为Player库存中的项目。

这篇关于绑定情况下的ItemsSource与DataContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)