2010-10-21 15 views
1

我有一個TreeView,其內容(嵌套的TreeViewItems)是通過數據綁定從數據集生成的,這似乎工作正常。我遇到的問題是,當我嘗試並在代碼中操作TreeViewItem頭部的內容時,Header屬性返回TreeViewItem從其生成的DataRowView,而不是像我期望的那樣由模板生成的控件。WPF TreeViewItem數據綁定後的標頭值

下面是我使用生成TreeViewItems模板的一個例子:

<DataTemplate x:Key="seasonTreeViewItemTemplate"> 
     <TreeViewItem> 
      <TreeViewItem.Header> 
       <CheckBox Content="{Binding Path=Row.SeasonID}" Tag="{Binding}" ToolTip="{Binding Path=Row.Title}" IsEnabled="{StaticResource seasonPermitted}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" /> 
      </TreeViewItem.Header> 

      <TreeViewItem Header="Championships" ItemTemplate="{StaticResource championshipTreeViewItemTemplate}"> 
       <TreeViewItem.ItemsSource> 
        <Binding Path="Row" ConverterParameter="FK_Championship_Season"> 
         <Binding.Converter> 
          <local:RowChildrenConverter /> 
         </Binding.Converter> 
        </Binding> 
       </TreeViewItem.ItemsSource> 
      </TreeViewItem> 
     </TreeViewItem> 
    </DataTemplate> 

任何人都可以指出我要去哪裏錯了,並告訴我如何訪問頭複選框(最理想的情況鑽研VisualTree如果可能的話)?

謝謝, 詹姆斯

回答

1

好了,經過一番搜索,我發現一個適當的解決問題。

使用下面的代碼,你可以找到在模板命名項:

if (treeViewItem != null) 
{ 
     //Get the header content presenter. 
     ContentPresenter header = treeViewItem.Template.FindName("PART_Header", treeViewItem) as ContentPresenter; 

     if (header != null) 
     { 
      //Find a CheckBox called "checkBoxName" 
      CheckBox cb = treeViewItem.HeaderTemplate.FindName("checkBoxName", header) as CheckBox; 
     } 
} 

此外,對於其他人誰可能不會太避讓的數據綁定樹視圖的好處:我張貼在模板我問題不是綁定樹視圖的正確方法。對樹的每個級別使用HierarchicalDataTemplate。該HierarchicalDataTemplate的直接內容將指定每個子樹的頭內容和設置的ItemsSource和ItemTemplate中的屬性將讓你綁定和格式化子樹的孩子,例如:

<HierarchicalDataTemplate x:Key="templateName" ItemsSource="{Binding Path=someCollection}" ItemTemplate="{StaticResource someOtherTemplate}"> 
    <TextBlock Text="{Binding Path=SomeProperty}" /> 
</HierarchicalDataTemplate> 

我希望別人會發現這個信息有用。