1

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 はオブジェクトの名前です。列であり、同じ DataTable 内の別の DataRow を参照しています。{Binding Parent.Items[IsExpanded]} や {Binding Parent("IsExpanded")} などの宣言を試しましたが、どれも機能していないようです。

DataTable の DataRow Parent の 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 Col3.Item(0)}" を使用して値 r1c1 を表示しようとしましたが、セルの内容に何も表示されません。何故ですか?Item(0) は Col3 のもう 1 つのプロパティであるべきではありませんか?

4

1 に答える 1

1

このバインディング式は、ビュー DataContext として設定されたオブジェクトでIsExpanded指定された DataTable プロパティで指定された列にバインドします。BindingDataTable

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

ただし[0]、DataTable の最初の行 ( ) を明示的に指定しています。以前に WPF DataGrid を使用したことがないため、現時点では、バインドされている現在の行インデックスを取得する方法がわかりません...何が解決できるかを確認し、見つかった場合は更新します。

于 2010-04-15T02:07:30.660 に答える