我有一个包含ComboBox
列的数据网格。我为我的组合框设置了Name
,但这个名字在代码中不可见,为什么?
<DataGrid ...>
<DataGrid.Columns>
<DataGrid.TemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="mex" Style="{DynamicResource ComboBoxStyle}"
ItemsSource="{Binding Path=combolist}"
SelectionChanged="status_SelectionChanged" Height="auto" Width="Auto">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGrid.TemplateColumn>
...
</DataGrid.Columns>
</DataGrid>
在C#中代码mex
是空的,不可见,为什么?
我也试过了x:Name="mex"
,但它仍然不可见。
C#:
mex.ItemsSource = dt;
unifined mex
答案 0 :(得分:3)
DataGridColumn
实际上从不在逻辑或可视树中;它始终是DataGridRow
DataGridCells
,因为它们会自动为DataGrid中的每一行创建。
到达组件的唯一方法是构建复杂的Binding或使用Logical或Visual Tree帮助程序找到它。
顺便说一下,您应该将ItemsSource
到ComboBox
的{{1}}设置为您行中的可用数据。您无法在Bindings
内使用ElementName
创建绑定,因为它不在逻辑树或可视树中。
我发现了一个有趣的链接,解释了DataGrid的Visual Tree:http://blogs.msdn.com/b/vinsibal/archive/2008/08/14/wpf-datagrid-dissecting-the-visual-layout.aspx。
答案 1 :(得分:0)
当元素存储在项目模板中时,您无法直接引用元素。通常,您希望允许viewmodel通过将datacontext设置为父对象来处理绑定,然后允许items模板中的元素选择它。但是,根据您的问题,看起来好像是在尝试直接从后面的代码执行此操作。
以下是两个类似的问题和解决方案,用于设置项目的datacontext以及引用项目模板中的元素。希望这有帮助
Access parent DataContext from DataTemplate
和
WPF - ItemsControl - How do I get find my "CheckBox" item that is in the ItemTemplate?
答案 2 :(得分:0)
因为所有行都使用模板。如果名称可用,则一次只能在可视树中使用相同的名称。