WPF DataGrid RowHeader数据绑定

eri*_*200 29 data-binding wpf datatable datagrid row

我有一个绑定到DataTable的DataGrid.我想在RowHeader中显示文本,以实现这样的事情:

         Col0      Col1      Col2      Col3
Table |    1    |    3    |    5    |    6    |
Chair |    3    |    2    |    1    |    8    |
Run Code Online (Sandbox Code Playgroud)

这是可能的,如果是这样,我该怎么做?

mar*_*etz 34

我尝试了两个答案,但都没有为我工作.基本上我要做的就是将它们混合在一起.

这对我有用:

<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>
Run Code Online (Sandbox Code Playgroud)

诀窍是找到祖先DataGridRow,然后将TextBlock.Text属性绑定到你关心的Item属性,在这种情况下Header(在XAML中比在英语中更容易说).

然后在.xaml.cs中:

ui_dataGrid.ItemsSource = dataSource.Rows;
Run Code Online (Sandbox Code Playgroud)

NB每个Row对象都有一个Header属性,这也是我绑定的属性.


den*_*zov 5

2种方法,prev例子几乎有它,但绑定将无法解析属性,因为表达式缺少"DataContext".

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

        <!--your stuff-->
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

第二种方法是创建一个转换器来获取绑定,在转换器中解析它并吐出你想要的任何字符串值:

<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>
Run Code Online (Sandbox Code Playgroud)

示例转换器代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


mic*_*ele 2

尝试设置 rowheader 模板,如下所示

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

        //your stuff
</DataGrid>
Run Code Online (Sandbox Code Playgroud)