1

我有一个数据网格,其中有一列包含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;

未定义的mex

4

3 回答 3

3

ADataGridColumn从未真正在逻辑树或可视树中;它始终是DataGridRowwith DataGridCells,因为它们是为 DataGrid 中的每一行自动创建的。

访问您的组件的唯一方法是构建一个复杂的绑定或使用逻辑或可视树帮助程序找到它。

顺便说一句,您应该将您ItemsSourceComboBox通过设置Bindings为您行中的可用数据。您不能ElementName在 a中使用它来创建绑定,DataGridTemplateColumn因为它不在逻辑树或可视树中。

我发现了一个有趣的链接来解释 DataGrid 的可视化树:http: //blogs.msdn.com/b/vinsibal/archive/2008/08/14/wpf-datagrid-dissecting-the-visual-layout.aspx

于 2012-07-10T14:01:23.557 回答
0

因为模板被所有行使用。如果名称可用。必须在一次可视化树中具有相同的名称。

于 2012-07-10T16:03:34.300 回答
0

当元素存储在项目模板中时,您不能直接引用它们。通常,您希望通过将 datacontext 设置为父对象来允许 viewmodel 处理绑定,然后允许项目模板中的元素拾取它。但是,根据您的问题,您似乎正在尝试直接从后面的代码中执行此操作。

这里有两个类似的问题和解决方案,用于设置项目的数据上下文以及引用项目模板中的元素。希望这可以帮助

从 DataTemplate 访问父 DataContext

WPF - ItemsControl - 如何在 ItemTemplate 中找到我的“CheckBox”项目?

于 2012-07-10T14:07:26.953 回答