我有一个绑定到DataTable的DataGrid。我想在RowHeader中显示文本,以实现这样的目的:
Col0 Col1 Col2 Col3
Table | 1 | 3 | 5 | 6 |
Chair | 3 | 2 | 1 | 8 |
这可能吗?如果可以,我该怎么做?
答案 0 :(得分:33)
我尝试了两个答案,但都没有为我工作。基本上我要做的就是将它们混合在一起。
这对我有用:
<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
属性绑定到您关心的Item属性,在本例中为Header
(在XAML中比在英语中更容易说)。
然后在.xaml.cs:
ui_dataGrid.ItemsSource = dataSource.Rows;
N.B。每个Row
对象都有Header
属性,这也是我绑定的属性。
答案 1 :(得分:5)
2种方法,prev示例几乎有它,但绑定将无法解析属性,因为表达式缺少“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;
}
}
答案 2 :(得分:2)
尝试设置rowheader模板,类似这样
<DataGrid>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding YourProperty}"></TextBlock>
</DataTemplate>
</DataGrid.RowHeaderTemplate>uff
//your stuff
</DataGrid>
答案 3 :(得分:1)
仅供参考,如果您直接绑定到数据表,那么这个绑定文本对我有用:
{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type DataGridRow}},
Path=Item.Row.Header}
稍微调整一下,发现在Item.Row.Header
路径中,路径从 DataGridRow 开始,Item
将您带到 DataGridView ,Row
将您带到 DataRow 。
同样,如果直接绑定到数据表。
答案 4 :(得分:0)
@michele:如果我将Binding修改为:
<TextBlock Text="{Binding DataContext.YourProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"/>
然后它几乎可以工作。问题是这会导致每行的行标题相同。
答案 5 :(得分:0)
您几乎就在那儿,只需将AncestorType更改为 DataGridRow 而不是 DataGrid ,那么每一行的行标题都会不同,例如