我尝试使用以下代码片段在列表视图项模板中显示组合框项。我正在尝试在组合框加载事件中获取组合字节的数据上下文。并且 datacontext 仅返回已查看列表视图项的值。它返回列表视图项组合框外的空值。
<ListView ItemsSource="{Binding PersonsTest, Mode=OneWay}" x:Name="TieLines">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<ComboBox DataContext="{Binding Orders}" ItemsSource="{Binding Numbers}" Loaded="ComboBox_Loaded" Width="250" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
问题为什么在列表视图中将视图外项的数据上下文值作为 null 返回? 如何从视图列表视图项中获取数据上下文? 或者,如果我需要启用任何其他属性来绑定 XAML 级别的组合框数据上下文?
仅从数据绑定属性的名称来看,很可能是绑定使用不正确。当您将PersonsTest
绑定到ListView
ItemsSource
时,这意味着对于PersonsTest
集合中的每个人,控件获取ItemTemplate
并填充它,就好像模板的DataContext
是特定的人一样。假设我们目前正在实例化人员P
的模板。
现在,当您使用{Binding Orders}
时,您实际上是在使用p.Orders
属性。但是,当您将ComboBox
的DataContext
设置为p.Orders
时,现在以下绑定{Binding Numbers}
也相对于p.Orders
。所以{Binding Numbers}
基本上意味着{Binding p.Orders.Numbers}
.我认为这不是您想要的,因为如果Orders
有一个名为Numbers
的属性,我会感到惊讶。
我希望您将ComboBox.ItemsSource
绑定到Orders
,然后绑定ComboBox.ItemTemplate
并依次对其进行自定义,而不是设置DataContext
,但由于我不知道您的数据模型是什么,我只是猜测。关键是您可能根本不需要设置ComboBox.DataContext
,而只需正确设置ItemsSource
属性即可。