在XAML中可见的名称
我有一个包含ComboBox
的列的数据网格。我为我的组合框设置了Name
,但是这个名字在代码中不可见,为什么?在XAML中可见的名称
<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;
undifined mex
回答:
一个DataGridColumn
从未真正在逻辑或Visual树;它始终是DataGridRow
和DataGridCells
,因为它们是为DataGrid中的每一行自动创建的。
到达组件的唯一方法是构建一个复杂的绑定或使用逻辑或视觉树帮助程序找到它。
顺便说一句,您应该将您的ComboBox
的ItemsSource
设置为Bindings
,以便将该行中的可用数据设置为。您不能在DataGridTemplateColumn
内使用ElementName
创建绑定,因为它不在逻辑树或可视树中。
我找到了一个有趣的链接,解释了DataGrid的可视化树:http://blogs.msdn.com/b/vinsibal/archive/2008/08/14/wpf-datagrid-dissecting-the-visual-layout.aspx。
回答:
当元素存储在项目模板中时,不能直接引用元素。通常情况下,您希望允许viewmodel通过将datacontext设置为父对象来处理绑定,然后允许项目模板中的元素选取该对象。然而,根据你的问题,它看起来好像你试图直接从后面的代码做到这一点。
下面是两个类似的问题和解决方案,用于设置项目的datacontext以及引用项目模板中的元素。希望这有助于
Access parent DataContext from DataTemplate
和
WPF - ItemsControl - How do I get find my "CheckBox" item that is in the ItemTemplate?
回答:
,因为模板是用于所有rows.if名可用。必须有可视化树同名一次。
以上是 在XAML中可见的名称 的全部内容, 来源链接: utcz.com/qa/260842.html