我的主要问题是关于场景中的绑定情况,我们有多个控件源(datagrid中的组合框)(或者同时有datagrid和itemssource)。那么我们如何知道绑定将使用哪个源?(任何语法来澄清这一点)
假设一个数据网格有一个itemssource=“List of Players”ontext =“Manager”,并且有一个组合框作为一种列。我们还假设每个玩家都有一个Inventory属性,它是一个集合类型。
然后在datagrid.列中:
1.每一列的当前源(用于绑定)是一个播放器(这是我到目前为止的理解)。我们只能绑定到播放器的属性,而不能绑定到播放器上下文“manager”的属性。没有办法绑定到“Manager”的属性。我是正确的吗?
1.然而,如果我们移动到combobox列,然后假设我将让combobox的itemssource ='player 's inventory',那么comboboxItem的当前源将是inventory中的每个项目。如果我使用绑定,它只能绑定到这些项目的属性。然而,有时候我会看到代码,我们也可以绑定到组合框的属性中的播放器的属性,特别是Selected Value和SelectedItem。我有点困惑你能帮帮我吗?
谢谢你
2条答案
按热度按时间2eafrhcq1#
要考虑的关键控件是**
ItemsControl
(ComboBox
继承自ItemsControl
,DataGrid
的行为非常相似)。ItemsControl
有IEnumerable
类型的ItemsSource
属性。它也有ItemTemplate
属性。它将做的是为ItemsSource
中的每个项目创建一个ItemTemplate
的副本**。ItemTemplate
的**DataContext
将是ItemsSource
中的每个项目**。在
ComboBox
的例子中,DataGrid
列的DataContext
将是Player
对象。如果将ComboBox
的ItemSource
绑定到Player
的库存,那么您将获得ComboBox
列表中的每个项目。需要注意的是,
ComboBox
本身的**DataContext
是不变的**。它仍然是Player
对象。如果你为ComboBox
指定了ItemTemplate
,那就是将它的DataContext
添加到Player
的库存中。fivyi3re2#
它真的很简单。
DataContext引用项目的相同属性。它不会被扩展,也不是动态的。DataContext应用于当前在父级中的子级属性。
但是ItemsSource是动态的,它会随着源代码沿着扩展,下面是一个很好的例子。
这是一个示例xaml。
字符串
下面是后面的代码。
型
正如您所看到的,DataContext应用于存在于StackPanel中的Textblocks,并引用一个单独的属性Text。
而ItemsSource引用Textblock的Image和Text属性的Source,列表中的项可以沿着ObservableCollection扩展。
或者让它对你来说更简单。
DataContext - Value基于设计设置。ItemsSource - Value基于逻辑设置。
希望这对你有帮助。
如果这回答了你的问题,请将其标记为答案。