为什么 DataContext 返回 null 值用于 ListView 项?



我尝试使用以下代码片段在列表视图项模板中显示组合框项。我正在尝试在组合框加载事件中获取组合字节的数据上下文。并且 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绑定到ListViewItemsSource时,这意味着对于PersonsTest集合中的每个人,控件获取ItemTemplate并填充它,就好像模板的DataContext是特定的人一样。假设我们目前正在实例化人员P的模板。

现在,当您使用{Binding Orders}时,您实际上是在使用p.Orders属性。但是,当您将ComboBoxDataContext设置为p.Orders时,现在以下绑定{Binding Numbers}也相对于p.Orders。所以{Binding Numbers}基本上意味着{Binding p.Orders.Numbers}.我认为这不是您想要的,因为如果Orders有一个名为Numbers的属性,我会感到惊讶。

我希望您将ComboBox.ItemsSource绑定到Orders,然后绑定ComboBox.ItemTemplate并依次对其进行自定义,而不是设置DataContext,但由于我不知道您的数据模型是什么,我只是猜测。关键是您可能根本不需要设置ComboBox.DataContext,而只需正确设置ItemsSource属性即可。

最新更新