listview - 为什么 DataContext 为 ListView 项目之外的项目返回空值?
问题描述
我尝试使用以下代码片段在 ListViewItems 模板中显示组合框项目。我尝试在组合框加载事件中获取组合框的数据上下文。并且 datacontext 仅返回查看的 listViewItems 的值。它返回列表视图项目组合框外的空值。
<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>
问题 为什么将 DataContext 值返回为空,用于 ListView 中的视图项?如何从视图 ListViewItems 中获取数据上下文?或者,如果我需要启用任何其他属性以在 XAML 级别绑定 ComboBox DataContext?
解决方案
仅从数据绑定属性的名称来看,您很可能错误地使用了绑定。当您绑定PersonsTest
到ItemsSource
of 时ListView
,这意味着对于PersonsTest
集合中的每个人,控件都会采用ItemTemplate
并填充它,就好像DataContext
模板的 是特定的人一样。假设我们目前正在为 person 实例化模板P
。
现在,当您使用时,{Binding Orders}
您实际上是在使用p.Orders
属性。但是,当您设置to 时DataContext
,现在以下绑定也变得相对于。所以基本上意味着。我想这不是你想要的,因为如果它有一个名为.ComboBox
p.Orders
{Binding Numbers}
p.Orders
{Binding Numbers}
{Binding p.Orders.Numbers}
Orders
Numbers
我希望您会绑定ComboBox.ItemsSource
到Orders
然后 aComboBox.ItemTemplate
并依次自定义它而不是设置DataContext
,但由于我不知道您的数据模型是什么,我只是在猜测。关键是您可能根本不需要设置ComboBox.DataContext
,而只需正确设置ItemsSource
属性。
推荐阅读
- ios - sqlite3_step 在 iOS 12 中导致 EXC_BAD_INSTRUCTION 崩溃
- python - 将mongodb json数组元素提取成json python
- reactjs - 如何在搜索后点击特定成员的完整详细信息?
- javascript - 使用Jquery事件'hashchange'重新格式化url哈希时如何避免无限循环
- python - How to remove quotes when I dump to another file?
- plot - df.plot() 对齐辅助 y 轴从零开始
- javascript - 在 Laravel Mix 中使用dependOn
- vue.js - 语法错误:从“电子”导入 {app、protocol、BrowserWindow}
- ios - 不符合可哈希协议?
- android - 弹出菜单使用图像的原始大小作为锚点,而不是实际大小