2015-02-24 68 views
0

我有以下嵌套列表視圖:在代碼中獲取嵌套的ListView的名字背後

<!-- Display a list of each CustomTab --> 
<!-- Drag & Drop functionality implemented in code behind using ListViewDragDropManager --> 
<ListView Name="TasksListView" 
      ItemsSource="{Binding Model.TaskCollection, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
      BorderThickness="0"> 

    <ListView.ItemTemplate> 
     <DataTemplate> 
      ..... 
      <!-- Parameters List --> 
      <ListView Name="TaskParameterListView" 
         ItemsSource="{Binding TaskParameterCollection, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
         BorderThickness="0"> 

       <ListView.ItemTemplate> 
        <DataTemplate> 
         ..... 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

     </DataTemplate> 
    </ListView.ItemTemplate>    
</ListView> 

我需要在代碼中訪問TaskParameterListView後面。我怎樣才能得到這個對象的引用?

隨着TasksListView我可以簡單地通過調用this.TasksListView

+0

你需要在後面的代碼中做什麼,在XAML中無法實現或通過綁定實現? – dkozl 2015-02-24 13:06:14

回答

0

這裏訪問它是你如何找到內心的ListView使用FrameworkTemplate.FindName:

DependencyObject container = TasksListView 
    .ItemContainerGenerator 
    .ContainerFromItem(TasksListView.SelectedItem); 

if (container != null) 
{ 
    ContentPresenter presenter = GetPresenter(container); 
    ListView listView = presenter 
     .ContentTemplate 
     .FindName("TaskParameterListView", presenter) as ListView; 
} 

其他方法來找到ListBoxItem的內ContentPresenter:

private static ContentPresenter GetPresenter(DependencyObject reference) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++) 
    { 
     DependencyObject child = VisualTreeHelper.GetChild(reference, i); 
     ContentPresenter presenter = 
     child as ContentPresenter ?? 
     GetPresenter(child); 

     if (presenter != null) 
     { return presenter; } 
    } 

    return null; 
}