Привязка WPF к столбцам DataRow - PullRequest
1 голос
/ 15 апреля 2010

Я взял пример кода из http://sweux.com/blogs/smoura/index.php/wpf/2009/06/15/wpf-toolkit-datagrid-part-iv-templatecolumns-and-row-grouping/, который обеспечивает группирование данных в WPF DataGrid. Я модифицирую пример, чтобы использовать DataTable вместо коллекции сущностей.

Моя проблема заключается в переводе объявления привязки {Binding Parent.IsExpanded}, которое отлично работает, когда Parent является ссылкой на объект, имеющий атрибут IsExpanded, на что-то, что будет работать для моего слабо типизированного DataTable, где Parent - имя столбца и ссылается на другой DataRow в том же DataTable. Я пробовал объявления типа {Binding Parent.Items [IsExpanded]} и {Binding Parent ("IsExpanded")}, но ни один из них, похоже, не работает.

Как создать привязку к столбцу IsExpanded родительского элемента DataRow в моей таблице данных?

Заранее спасибо, Dave

РЕДАКТИРОВАТЬ: я создал пример кода для общего случая этой проблемы:

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

Я пытался использовать строку Binding = "{Binding Col3.Item (0)}", чтобы показать значение r1c1, но в содержимом ячейки ничего не появляется. Это почему? Разве Item (0) не должен быть просто другим свойством Col3?

1 Ответ

1 голос
/ 15 апреля 2010

Это выражение привязки будет привязано к столбцу с именем IsExpanded в свойстве DataTable с именем BindingDataTable для объекта, который задан как представления DataContext.

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

Однако я явно указываю первую строку ([0]) DataTable. Раньше я не использовал WPF DataGrid, поэтому на данный момент я не уверен, как получить текущий индекс строки, который привязывается ... Я посмотрю, что мне удастся обработать и обновить, если найдут.

...