0
我已經使用datatable構建了一個datagrid,並且結果顯示正確。 現在我打算將ROWHEADER添加到數據網格中。我填充了observable collection<string>
和XAML
,我使用它作爲行頭數據模板路徑。儘管如此,它還沒有出現。有人可以建議問題出在哪裏嗎?WPF datagrid行標題綁定 - 可觀察集合
public ObservableCollection<string> Rownameheaders { get; set; } //in the main .cs
//xaml.cs
public void Form1_load(object sender, EventArgs e)
{
WF_CRM_RPluginModel model = DataContext as WF_CRM_RPluginModel;
var hello1 = new ObservableCollection<String>();
for(int i=0; i< model.prodwells.Count;i++)
{
hello1.Add(model.prodwells[i]);
}
model.Rownameheaders = hello1;
List<double[]> list = new List<double[]>();
for (int i = 0; i < model.RowFijtable; i++)
{
double[] rowdata = new double[model.ColFijtable];
for (int j = 0; j < model.ColFijtable; j++)
{
rowdata[j] = model.TauTable[i, j];
}
list.Add(rowdata);
}
DataTable table = ConvertListToDataTable(list);
dataGridView1.ItemsSource = table.AsDataView();
}
private DataTable ConvertListToDataTable(List<double[]> list)
{
DataTable table = new DataTable();
WF_CRM_RPluginModel model = DataContext as WF_CRM_RPluginModel;
// Get max columns.
int columns = 0;
foreach (var array in list)
{
if (array.Length > columns)
{
columns = array.Length;
}
}
// Add columns.
for (int i = 0; i < columns; i++)
{
// Provide default column name & data type
table.Columns.Add(model.injwells[i], typeof(double));
}
// Add rows.
foreach (var array in list)
{
// assign each array element to the appropriate column
var row = table.NewRow();
for (int i = 0; i < array.Length; ++i)
row.SetField(i, array[i]);
table.Rows.Add(row);
}
return table;
}
XAML:
<DataGrid Name="dataGridView1" Loaded="Form1_load" ItemsSource="{Binding}" AutoGenerateColumns="True" AlternatingRowBackground="Gainsboro" CanUserSortColumns="False">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Rownameheaders}"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
</DataGrid>
這是結果我得到的,但沒有行標題...
您的綁定查找類型爲「DataGridRow」的可視祖先,並且如果它找到一個,它將綁定到「DataGridRow.Rownameheaders」。但是'DataGridRow'沒有這個名字的屬性。試試'Path = DataContext.Rownameheaders [0]' - 我想這會給你第一個rowname頭。你的下一個問題是如何讓它從每個行的集合中獲得正確的項目。我猜,某種多值轉換器可以綁定到Rownameheaders以及它會從中獲取索引的東西。 –
也許你最好的選擇是將RowHeader列添加到你的DataTable並綁定到它。或者使用POCO類而不是DataTable的集合,併爲POCO類提供一個將用作行標題的屬性。 –
謝謝@EdPlunkett!我最終添加了一個新的專欄。請看答案! – user7157732