2009-08-10 11 views
0

Ich habe eine Steuerelementvorlage in XAML, die eine Listview mit einem Gridview enthält. Ich möchte die ListView an eine Datentabelle binden, die in C# erstellt wird, aber ich kann die Listview dazu nicht anzeigen, da es sich in einer Steuerelementvorlage befindet. Ich habe die entsprechende Listenansicht in C# erstellt, indem ich auf die Kontrollschablone und deren Inhalt Bezug genommen habe, und dachte, dass ich damit die Bindung festlegen könnte, aber es hat nicht funktioniert. Hat jemand irgendwelche Vorschläge?Aktualisieren Sie eine XAML-Steuerelementvorlage aus 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); 
    } 

Antwort

0

try

lvBonusHistory.Source = dtBonusHistory; 

mit wie das ist, was Sie sowieso acheive versuchen.

0

Erstellen Sie eine angefügte Eigenschaft für das übergeordnete Steuerelement und verwenden Sie dann TemplateBinding in der ControlTemplate. Auf diese Weise können Sie die Quelle in ControlTemplate übergeben.

Verwandte Themen