从DataTemplate中的控件获取GridViewColumn

时间:2011-11-22 17:35:38

标签: wpf listview header datatemplate gridviewcolumn

示例:

<ListView Name="lvAnyList" ItemsSource="{Binding}">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="xx" DisplayMemberBinding="{Binding XX}" CellTemplate="{DynamicResource MyDataTemplate}"/>
      <GridViewColumn Header="yy">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding YY}" />
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView> 

如果我访问TextBlock内的DataTemplate,我将可以访问有关绑定路径的信息。 但我不知道如何找到(从TextBlock开始)包含GridViewColumn(位于GridViewRowPresenter列列表中)并将其与网格GridViewColumn进行比较(从GridViewHeaderRowPresenter列列表中)获取标题的名称。

最后我应该有对:xx-&gt; XX,yy-&gt; YY

我可以使用以下代码查找TextBlocks内所有ListView的列表:

GridViewRowPresenter gvrp = ControlAux.GetVisualDescendants<GridViewRowPresenter>(element).FirstOrDefault();
IEnumerable<TextBlock> entb = GetVisualDescendants<TextBlock>(gvrp);

我可以找到所有GridViewColumnHeaders的列表:

GridViewHeaderRowPresenter gvhrp = ControlAux.GetVisualDescendants<GridViewHeaderRowPresenter>(element).FirstOrDefault();

我找不到TextBlocksGridViewColumns ...

之间的联系

我希望这是可以理解的。

1 个答案:

答案 0 :(得分:0)

GridViewColumns是它们永远不会出现在UI中的任何位置的抽象对象,您可以尝试命名列并使用ElementName将其绑定到您需要它的控件的标记,或者如果它失败Source } x:Reference名称。