тогда заголовки строк будут разными для каждой строки, например

я есть DataGrid, связанный с DataTable. Я хочу отобразить текст в RowHeader, чтобы добиться чего-то вроде этого:

         Col0      Col1      Col2      Col3
Table |    1    |    3    |    5    |    6    |
Chair |    3    |    2    |    1    |    8    |

Возможно ли это, и если да, то как я могу это сделать?

 VoodooChild25 янв. 2011 г., 10:53
Вы действительно имеете в виду RowHeader или вы хотели сказать ColumnHeader?

Ответы на вопрос(6)

и ни один из них не помог мне. По сути, мне нужно было смешать их вместе.

Это работает для меня:

<DataGrid name="ui_dataGrid>
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                      AncestorType={x:Type DataGridRow}}, 
                                      Path=Item.Header}"/>
        </DataTemplate>
    </DataGrid.RowHeaderTemplate>
</DataGrid>

Хитрость в том, чтобы найти предкаDataGridRowзатем связатьTextBlock.Text приписать к свойству предмета, о котором вы заботитесь, в этом случаеHeader (проще сказать на XAML, чем на английском, может быть).

Тогда в .xaml.cs:

ui_dataGrid.ItemsSource = dataSource.Rows;

Нотабене каждыйRow объект имеетHeader свойство, которое я тоже обязательный.

 Jeff28 февр. 2011 г., 04:03
+1: Рок со своим плохим я.
 Magnetron27 мар. 2018 г., 15:22
Вы также можете использоватьItem[0] чтобы получить первый столбец, вместо того, чтобы указать имя и использовать этот ответstackoverflow.com/a/16460193/5762332 скрыть первый столбец
 LuckyLikey28 мар. 2017 г., 15:34
Обратите внимание, что путь действительноitem.propertyname. Если кто-то скажет мне, как выяснить, какие свойства доступны в текстовом тексте во время выполнения, это мне очень поможет.

если вы привязываете непосредственно к таблице данных, то этот текст привязки работал для меня:

{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                  AncestorType={x:Type DataGridRow}}, 
                                  Path=Item.Row.Header}

Покопался немного и обнаружил, что вItem.Row.Header путь начинается сDataGridRow,Item доставит вас кDataGridViewиRow доставит вас кDataRow.

Опять же, если вы привязываете непосредственно к таблице данных.

предыдущий пример почти имел это, но привязка не смогла бы разрешить свойство, потому что в выражении отсутствовал «DataContext».

<DataGrid>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding DataContext.YourProperty}"></TextBlock>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>

        <!--your stuff-->
</DataGrid>

Второй способ сделать это - создать конвертер для получения привязки, проанализировать его в конвертере и выложить любое строковое значение:

<Views:DataGridRowDataContextToRowHeaderValueConverter x:Key="toRowHeaderValue"/>

<DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                       AncestorType={x:Type DataGridRow}},
                       Converter={StaticResource toRowHeaderValue}}"/>
        </DataTemplate>
</DataGrid.RowHeaderTemplate>

Пример кода конвертера:

public class DataGridRowDataContextToRowHeaderValueConverter : IValueConverter
{
    public object Convert (object value, Type targetType, object parameter, 
                           CultureInfo culture)
    {     
        var dataGridRow = (DataGridRow) value;
        var row = (GridModelExtensions.HourRow) dataGridRow.DataContext;
        return row.Days[0].Hour;
    }
}

DataGridRow вместоDataGrid тогда заголовки строк будут разными для каждой строки, например

@michele: если я изменю привязку к:

<TextBlock Text="{Binding DataContext. RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"/> 

тогда это почти работает. Проблема в том, что это приводит к одному и тому же заголовку строки для каждой строки.

 michele25 янв. 2011 г., 21:13
Хорошо, когда я писал YourProperty, я имел в виду, что вы можете привязать RowHeader к любому свойству одной строки, которую вы добавляете в сетку; не стесняйтесь предоставить часть вашего кода, может быть, я могу помочь вам в дальнейшем!

Попробуйте установить шаблон rowheader, что-то вроде этого

<DataGrid>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding YourProperty}"></TextBlock>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>uff

        //your stuff
</DataGrid>

Ваш ответ на вопрос