Получить GridViewColumn из элемента управления внутри DataTemplate - PullRequest
2 голосов
/ 22 ноября 2011

Пример:

<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-> XX, yy-> YY

Я могу найти список всех TextBlocks внутри ListViewиспользуя это:

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

Я могу найти список всех GridViewColumnHeaders:

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

И я не могу найти связь между TextBlocks и GridViewColumns...

Надеюсь, это понятно.

1 Ответ

0 голосов
/ 22 ноября 2011

GridViewColumns являются абстрактными объектами, они никогда не появляются нигде в пользовательском интерфейсе, вы можете попробовать присвоить имя столбцу и связать его с тегом элемента управления, где он вам нужен, с помощью ElementName или, если это не удастся, Source с x:Reference на имя.

...