3

DataGridTemplateColumns を持つ DataGrid があります。TemplateColumn では、正常に動作する DataTrigger を使用しています。DataGrid の親から Item Count を取得します。

<DataGridTemplateColumn>                                                         
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
             ...
             <!-- this works fine! -->
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
                AncestorType={x:Type DataGrid}}, Path=Items.Count}" Value="1">
                    ...
             </DataTrigger>
          </DataTemplate>

テンプレートが配置されている現在の RowIndex を取得することは可能ですか? 現在の DataGridRow にバインドすることは可能だと思います。次のような「GetIndex()」のバインディング パスはサポートされません。

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
    AncestorType={x:Type DataGridRow}}, Path=GetIndex()}" Value="0"> <!-- error: GetIndex() -->

xamlからバインドする代替手段はありDataGridRow.GetIndex()ますか?

4

1 に答える 1

4

Propertiesオブジェクトのメソッドにのみバインドでき、メソッドにはバインドできません。IValueConverterメソッドにバインドする場合は、 a を使用する必要があります -

public class MyConverter : DependencyObject, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
                             System.Globalization.CultureInfo culture)
    {
        return (value as DataGridRow).GetIndex();
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                               System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

このようにバインドします-

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
                        AncestorType={x:Type DataGridRow}},
                        Converter={StaticResource MyConverter}}"
            Value="0">
于 2012-11-22T18:16:23.900 に答える