我有一个DataGrid,绑定到一个DataTable。我想在RowHeader中显示文本,以实现如下目的:WPF DataGrid RowHeader数据绑定
Col0 Col1 Col2 Col3
Table | 1 | 3 | 5 | 6 |
Chair | 3 | 2 | 1 | 8 |
这是可能的,如果是这样,我该怎么做?
我有一个DataGrid,绑定到一个DataTable。我想在RowHeader中显示文本,以实现如下目的:WPF DataGrid RowHeader数据绑定
Col0 Col1 Col2 Col3
Table | 1 | 3 | 5 | 6 |
Chair | 3 | 2 | 1 | 8 |
这是可能的,如果是这样,我该怎么做?
尝试设置的rowHeader模板,像这样
<DataGrid>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding YourProperty}"></TextBlock>
</DataTemplate>
</DataGrid.RowHeaderTemplate>uff
//your stuff
</DataGrid>
@michele:如果我修改绑定到:
<TextBlock Text="{Binding DataContext.YourProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}"/>
那么它几乎工作。问题是这导致每行的相同行标题。
好吧,当我写YourProperty我的意思是你可以将RowHeader绑定到你添加到网格的单个行的任何属性;随时提供你的代码,也许我可以帮助你进一步! – michele 2011-01-25 20:13:07
我试了两个答案,但都没有为我工作。基本上我所要做的就是把它们混合在一起。
这个工作对我来说:
<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
,然后绑定在这种情况下Header
的TextBlock.Text
属性及其产品的属性,你关心,(更容易在XAML说非英语也许)。
然后在.xaml.cs:
ui_dataGrid.ItemsSource = dataSource.Rows;
注:每个对象都有一个Header
属性,这也是我所绑定的。
+1:摇滚与你的坏自我。 – Jeff 2011-02-28 03:03:37
仅供参考,如果你直接绑定到数据表中,那么这个文本装订工作对我来说:
{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type DataGridRow}},
Path=Item.Row.Header}
周围一点点拨开,发现在Item.Row.Header
路径,该路径始于DataGridRow,则Item
带你到的DataGridView和带您到的DataRow。
同样,如果您直接绑定到数据表。
2种方法可以做到这一点,前面的例子几乎都有,但绑定将无法解决属性,因为表达式缺少“DataContext”。
<DataGrid>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataConext.YourProperty}"></TextBlock>
</DataTemplate>
</DataGrid.RowHeaderTemplate>uff
//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>
//sample converter code
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;`
你真正的意思的rowHeader,或做你打算说ColumnHeader? – VoodooChild 2011-01-25 09:53:22