2010-04-15 8 views
1

J'ai pris quelques exemples de code de http://sweux.com/blogs/smoura/index.php/wpf/2009/06/15/wpf-toolkit-datagrid-part-iv-templatecolumns-and-row-grouping/ qui fournit le regroupement des données dans un DataGrid WPF. Je modifie l'exemple pour utiliser un DataTable au lieu d'une collection d'entités. Mon problème est de traduire une déclaration de liaison {Binding Parent.IsExpanded}, qui fonctionne bien où Parent est une référence à une entité qui a l'attribut IsExpanded, à quelque chose qui fonctionnera pour mon DataTable faiblement typé, où Parent est le nom d'une colonne et référence un autre DataRow dans le même DataTable. J'ai essayé des déclarations comme {Reliure Parent.Items [IsExpanded]} et {Binding Parent ("IsExpanded")}, mais aucun d'entre eux ne semble fonctionner.WPF Reliure à DataRow Colonnes

Comment puis-je créer une fixation à la colonne IsExpanded du parent DataRow dans mon DataTable?

Merci à l'avance, Dave

EDIT: J'ai créé quelques exemples de code pour un cas générique de ce problème:

Window1.xaml:

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <WpfToolkit:DataGrid 
      Name="dgSampleData" 
      ItemsSource="{Binding}" 
      AutoGenerateColumns="True" 
      Margin="0,75,0,0"> 
      <WpfToolkit:DataGrid.Columns> 
       <WpfToolkit:DataGridTextColumn 
        Header="Bound Data" 
        Binding="{Binding Col3.Item(0)}" 
        /> 
      </WpfToolkit:DataGrid.Columns> 
     </WpfToolkit:DataGrid> 
    </Grid> 
</Window> 

Window1.xaml. vb:

Imports System.Data 

Class Window1 

    Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded 

     Dim dtSampleData As New DataTable 
     dtSampleData.Columns.Add("Col1") 
     dtSampleData.Columns.Add("Col2") 
     dtSampleData.Columns.Add("Col3") 
     dtSampleData.Rows.Add(dtSampleData.NewRow()) 
     dtSampleData.Rows.Add(dtSampleData.NewRow()) 
     dtSampleData.Rows(0).Item(0) = "r1c1" 
     dtSampleData.Rows(0).Item(1) = "r1c2" 
     dtSampleData.Rows(0).Item(2) = dtSampleData.Rows(0) 
     dtSampleData.Rows(1).Item(0) = "r2c1" 
     dtSampleData.Rows(1).Item(1) = "r2c2" 
     dtSampleData.Rows(1).Item(2) = dtSampleData.Rows(0) 
     dgSampleData.DataContext = dtSampleData 

    End Sub 

End Class 

J'ai essayé d'utiliser la ligne de liaison = "{Binding Co l3.Item (0)} "pour montrer la valeur r1c1, mais rien n'apparaît dans le contenu de la cellule. Pourquoi donc? L'article (0) ne devrait-il pas être une autre propriété de Col3?

Répondre

1

Cette expression de liaison se liera à une colonne nommée IsExpanded sur une propriété DataTable nommée BindingDataTable sur l'objet défini en tant que vues DataContext.

<CheckBox IsChecked="{Binding BindingDataTable.(Rows)[0][IsExpanded]}" 
      Content="Test"></CheckBox> 

Cependant je suis la première ligne spécifiant ([0]) du DataTable explicitement. Je ne l'ai pas utilisé le DataGrid WPF avant donc je ne suis pas sûr à ce stade comment obtenir l'indice courant de ligne qui est lié ... Je vais voir ce que je peux travailler et mettre à jour si trouvé.

+0

Merci pour cette Simon. Chaque ligne a une colonne appelée Parent qui est une référence à l'une des autres lignes dans le DataTable. Est ce que ça aide? – Trindaz

+0

@Trindaz Qu'est-ce que vous essayez de lier la valeur Parent.IsExpandable à? Un certain type de 'DataGridColumn' via la propriété Binding? –