2010-04-15 5 views
1

http://sweux.com/blogs/smoura/index.php/wpf/2009/06/15/wpf-toolkit-datagrid-part-iv-templatecolumns-and-row-grouping/에서 WPF DataGrid의 데이터 그룹화를 제공하는 샘플 코드를 사용했습니다. 엔터티 컬렉션 대신 DataTable을 사용하도록 예제를 수정합니다.WPF에서 DataRow 열 바인딩

내 문제는 부모가 IsExpanded 특성을 가진 엔터티에 대한 참조 인 곳에서 잘 작동하는 바인딩 선언 {Binding Parent.IsExpanded}을 약한 형식의 DataTable에 대해 작동하는 것으로 변환하는 것입니다. 여기서 Parent는 열의 이름과 동일한 DataTable의 다른 DataRow를 참조합니다. {Binding Parent.Items [IsExpanded]} 및 {Binding Parent ("IsExpanded")}와 같은 선언을 시도했지만 이들 중 아무 것도 작동하지 않는 것 같습니다.

내 DataTable에서 DataRow 부모의 IsExpanded 열에 바인딩을 만들려면 어떻게해야합니까? 사전에

감사합니다, 데이브

편집 : 나는이 문제의 일반적인 경우에 대한 몇 가지 샘플 코드를 만들었습니다

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 Co l3.Item (0)} "을 지정하면 값 r1c1이 표시되지만 셀 내용에는 아무 것도 표시되지 않습니다. 왜 그런가요? 항목 (0)은 Col3의 다른 속성일까요?

답변

1

이 바인딩 식은 뷰 DataContext로 설정된 개체의 BindingDataTable이라는 DataTable 속성의 IsExpanded 열에 바인딩됩니다.

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

그러나 DataTable의 첫 번째 행 ([0])을 명시 적으로 지정하고 있습니다. WPF DataGrid를 사용하지 않았으므로이 시점에서 바운드되는 현재 행 인덱스를 얻는 방법을 잘 모르겠습니다 ... 내가 찾은 경우 제대로 작동하는지 확인할 것입니다.

+0

이 Simon에게 감사드립니다. 각 행에는 DataTable의 다른 행 중 하나에 대한 참조 인 Parent라는 열이 있습니다. 그게 도움이 되니? – Trindaz

+0

@Trindaz Parent.IsExpandable 값을 무엇으로 바인딩하려고합니까? Binding 속성을 통해 어떤 종류의'DataGridColumn'? –