2009-08-10 3 views
0

XAML에서 gridview가있는 listview가 포함 된 컨트롤 템플릿이 있습니다. C#에서 만든 datatable에 listview를 바인딩하고 싶지만 컨트롤 템플릿 안에 있기 때문에 listview를 볼 수 없습니다. 나는 컨트롤 템플릿과 그 내용을 참조함으로써 C#에서 상응하는 listview를 만들었고 바인딩을 설정하기 위해 이것을 사용할 수 있다고 생각했지만 작동하지 않았다. 어떤 제안이 있습니까?C#의 XAML 컨트롤 템플릿 업데이트

<ControlTemplate x:Key="HistoryView" TargetType="{x:Type ListViewItem}"> 

       <StackPanel x:Name="stkBonusHistory" Height="400" Visibility="Visible"> 

       <GridViewRowPresenter Content="{TemplateBinding Content}" Columns="{TemplateBinding GridView.ColumnCollection}"/> 

       <!--this is the listview which I am hoping to turn into the "expander" detail--> 
        <ListView x:Name="lvBonusHistory" Width="950" Visibility="Visible" Height="300"> 
         <ListView.View> 
         <GridView x:Name="gvBonusHistory" ColumnHeaderTemplate="{StaticResource GridViewHeader}" > 
         <GridViewColumn Header="Bonus Start" DisplayMemberBinding="{Binding BonusStart}" Width="150"/> 
         <GridViewColumn Header="Bonus End" DisplayMemberBinding="{Binding BonusEnd}" Width="150"/> 
         <GridViewColumn Header="Length" DisplayMemberBinding="{Binding Duration}" Width="75"/> 
         <GridViewColumn Header="Status" DisplayMemberBinding="{Binding BonusStatus}" Width="75"/> 
         <GridViewColumn Header="Note" DisplayMemberBinding="{Binding Note}" Width="75"/> 
         </GridView> 
        </ListView.View> 
        </ListView> 
       </StackPanel> 
      </ControlTemplate> 

      <ListView x:Name="lvBonusList" Width="1000"> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="Template" Value="{StaticResource Default}"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding LeaversBonus}" Value="1"> 
        <Setter Property="Template" Value="{StaticResource LeaversBonus}"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding HistoryShow}" Value="1"> 
        <Setter Property="Template" Value="{StaticResource Default}"/> 
        <Setter Property="Template" Value="{StaticResource HistoryView}"/> 
        </DataTrigger> 
       </Style.Triggers> 
       </Style> 
      </ListView.ItemContainerStyle> 

      <ListView.View> 
       <GridView x:Name="gvBonusList" ColumnHeaderTemplate="{StaticResource GridViewHeader}" > 
       <GridViewColumn x:Name="BonusHistory" Width="20" CellTemplate="{StaticResource BonusHistoryGraphic}" > 
       </GridViewColumn> 
       <GridViewColumn Header="Name" DisplayMemberBinding="{Binding EmployeeName}" Width="250"/> 
       <GridViewColumn Header="Emp ID" DisplayMemberBinding="{Binding EmpID}" Width="75"/> 
       <GridViewColumn Header="Employee Start" DisplayMemberBinding="{Binding EmpStart}" Width="150" /> 
       <GridViewColumn Header="Employee End" DisplayMemberBinding="{Binding EmpEnd}" Width="150"/> 
       <GridViewColumn Header="Bonus Start" DisplayMemberBinding="{Binding BonusStart}" Width="150"/> 
       <GridViewColumn Header="Bonus End" DisplayMemberBinding="{Binding BonusEnd}" Width="150"/> 
       <GridViewColumn Header="Length" DisplayMemberBinding="{Binding Duration}" Width="75"/> 
       </GridView> 
      </ListView.View> 
      </ListView> 

Codebehind가 어쨌든 acheive하려고 이잖아로

lvBonusHistory.Source = dtBonusHistory; 

를 사용

private void PopulateBonusHistory() 
{ 
     // populates dtBonusHistory 
     BonusHistoryGet(); 
     ControlTemplate HistoryView = (ControlTemplate)stkBonusList.Resources["HistoryView"]; 
     StackPanel stkBonusHistory = (StackPanel)HistoryView.LoadContent(); 
     (stkBonusHistory.Children[1]).Visibility = Visibility.Collapsed; 
     ListView lvBonusHistory = (ListView)stkBonusHistory.Children[1]; 
     lvBonusHistory.View = (GridView)(lvBonusHistory.FindName("gvBonusHistory")); 

     Binding bind = new Binding(); 
     lvBonusHistory.DataContext = dtBonusHistory; 
     lvBonusHistory.SetBinding(ListView.ItemsSourceProperty, bind); 
    } 

답변

0

시도.

0

부모 컨트롤에 연결된 속성을 만든 다음 ControlTemplate에서 TemplateBinding을 사용하십시오. 이렇게하면 소스를 ControlTemplate에 전달할 수 있습니다.