首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGrid RowHeader数据绑定

WPF DataGrid RowHeader数据绑定
EN

Stack Overflow用户
提问于 2011-01-25 17:45:34
回答 6查看 26K关注 0票数 32

我有一个绑定到DataTable的DataGrid。我想要在RowHeader中显示文本,以实现如下所示:

代码语言:javascript
复制
         Col0      Col1      Col2      Col3
Table |    1    |    3    |    5    |    6    |
Chair |    3    |    2    |    1    |    8    |

这是可能的吗?如果可能,我如何做到这一点?

EN

回答 6

Stack Overflow用户

发布于 2011-02-10 21:59:42

两个答案我都试过了,对我来说都不管用。基本上,我要做的就是把它们混合在一起。

这对我来说很有效:

代码语言:javascript
复制
<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中:

代码语言:javascript
复制
ui_dataGrid.ItemsSource = dataSource.Rows;

注意:每个Row对象都有一个Header属性,这也是我要绑定的。

票数 36
EN

Stack Overflow用户

发布于 2011-09-03 01:54:15

有两种方法可以做到这一点,前一个示例几乎拥有它,但是绑定将无法解析该属性,因为表达式缺少“DataContext”。

代码语言:javascript
复制
<DataGrid>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding DataContext.YourProperty}"></TextBlock>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>

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

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

代码语言:javascript
复制
<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>

示例转换器代码:

代码语言:javascript
复制
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;
    }
}
票数 6
EN

Stack Overflow用户

发布于 2011-01-25 18:01:16

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

代码语言:javascript
复制
<DataGrid>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding YourProperty}"></TextBlock>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>uff

        //your stuff
</DataGrid>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4791929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档