我有一個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