绑定情况下的ItemsSource与DataContext [英] ItemsSource vs DataContext in binding case

查看:61
本文介绍了绑定情况下的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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆