2009-08-10 7 views
0

J'ai un modèle de contrôle en XAML qui contient une vue liste avec une grille. Je veux lier la listview à une datatable créée en C# mais je ne peux pas voir la listview pour le faire car c'est dans un template de contrôle. J'ai créé la listview équivalente en C# en référençant le modèle de contrôle et son contenu et j'ai pensé que je serais capable de l'utiliser pour définir la liaison, mais cela n'a pas fonctionné. Est-ce que quelqu'un a des suggestions?Mise à jour d'un modèle de contrôle XAML à partir de C#

<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

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); 
    } 

Répondre

0

essayer d'utiliser

lvBonusHistory.Source = dtBonusHistory; 

comme est ce que vous essayez de acheive de toute façon.

0

Créez une propriété jointe sur le contrôle parent, puis utilisez TemplateBinding dans ControlTemplate. De cette façon, vous pouvez passer la source dans ControlTemplate.

Questions connexes