1

リストは、Silverligh 4 で DataGrid にバインドされます。

<data:DataGrid
        x:Name="dataGrid"    
        ItemsSource="{Binding DetailsCollection}"
        IsReadOnly="True">
    <data:DataGrid.Columns>                    
        <data:DataGridTemplateColumn>
            <data:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding IsDirty, Converter={StaticResource IsDirtyConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                </DataTemplate>
            </data:DataGridTemplateColumn.CellTemplate>
        </data:DataGridTemplateColumn>
    </data:DataGrid.Columns>
</data:DataGrid>

DataGridTemplateColumn の TextBlock にバインドされた IsDirty プロパティは、DetailsCollection のプロパティです。DataGridTemplateColumn 内の Binding は、リスト内の特定の項目のプロパティを調べています。リストのプロパティに到達するようにその動作を変更するにはどうすればよいですか?

4

1 に答える 1

1

これを「箱から出して」行うことはできません。その理由は、DataGridCell の DataContext がバインド先の項目に設定されているためです。これを行うにはいくつかの方法があります。おそらく最も簡単な方法は、リストを参照するようにデータ項目を変更することです。これを何度も行う必要がある場合は、役立つツールをコーディングすることをお勧めします。

表示ツリー (VisualTreeHelper を参照) を移動し、ターゲット要素を名前で検索する AncestorDataContext のようなものと呼ばれる添付プロパティを作成できます。それが見つかると、その FrameworkElement の DataContext を、見つかったコントロールである DataGrid に設定します。SL に RelativeSource FindAncestor がないことを補うために、私はこのアプローチを多用してきました。

<DataTemplate><Border custom:AncestorDataContext="dataGrid">
  <TextBlock Text="{Binding ItemsSource.IsDirty, Converter={StaticResource IsDirtyConverter}}"  HorizontalAlignment="Center" VerticalAlignment="Center" />

于 2011-02-11T18:19:23.710 に答える