WPF MVVM 动态数据表绑定不显示单元格的值
WPF MVVM Dynamic DataTable Binding does not show value of cells
我有一个 DataGrid,它显示来自绑定到我的 code-behind 的数据 Table 的数据。
(我要绘制的 TableData 取决于 ComboBox 的 selectedItem。更改 selectedItem 时它会更改列 headers,所以我认为这不是问题。在两个 prictures 中看到这个下)
因此,.xaml 中的 DataGrid 如下所示:
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=CurrentTable.CurrentDataTable.DefaultView}" >
</DataGrid>
在我的 ViewModel 中,我有一个来自 class Table 信息的名为“CurrentTable”的 object。
它看起来像这样:
public class TableInformation : BaseViewModel
{
public string TableName; //with geter, seter
public DataTable CurrentDataTable; //with geter, seter
}
由于 PropertyChanged 事件,with 继承自 BaseViewModel(这很好用!)。
加载我的 CurrentTable 时,代码如下所示:
public void LoadInitialJsonData()
{
// Fill all table data
QtyTopLevelKeys = BPPCjson_if.BPPCjson_getTableCount(context);
for (int curTableIdx = 0; curTableIdx < QtyTopLevelKeys; curTableIdx++)
{
int qtyRows = // rowCount
int qtyCols = // columnCount
var curDataTable = new DataTable();
// set Header Name for each column
for (int curCol = 0; curCol < qtyCols; curCol++)
{
string curHeader = //unique headername from interface
if (!curDataTable.Columns.Contains(curHeader))
{
curDataTable.Columns.Add(curHeader, typeof(string));
// PropertyChangedEvent has no effect here
}
}
// set Value for each cell
for (int curRow = 0; curRow < qtyRows; curRow++)
{
DataRow curRowData;
curRowData = curDataTable.NewRow();
for (int curCol = 0; curCol < qtyCols; curCol++)
{
string data = //value of cell
curRowData[curCol] = data;
}
curDataTable.Rows.Add(curRowData);
}
curDataTable.TableName = //unique Name
TableInformation ti = new TableInformation(curTableName, qtyRows, qtyCols, curDataTable);
AllTables.Add(ti);
}
}
不幸的是,显示的 Table 看起来像这样:
Cell-values not shown but cells are existing 1
Cell-values not shown but cells are existing 2
你能帮帮我吗?为什么它显示了正确数量的 Rows/Cells 但没有任何内容?
它还说我有绑定错误。但我真的不明白为什么...
Binding errors
非常感谢您的帮助!!!
在@ASh 的帮助下,我自己找到了它。
我的“唯一标头名称”确实包含点。
我所做的只是替换谷歌搜索可能有用的东西。
我有一个 DataGrid,它显示来自绑定到我的 code-behind 的数据 Table 的数据。 (我要绘制的 TableData 取决于 ComboBox 的 selectedItem。更改 selectedItem 时它会更改列 headers,所以我认为这不是问题。在两个 prictures 中看到这个下)
因此,.xaml 中的 DataGrid 如下所示:
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=CurrentTable.CurrentDataTable.DefaultView}" >
</DataGrid>
在我的 ViewModel 中,我有一个来自 class Table 信息的名为“CurrentTable”的 object。 它看起来像这样:
public class TableInformation : BaseViewModel
{
public string TableName; //with geter, seter
public DataTable CurrentDataTable; //with geter, seter
}
由于 PropertyChanged 事件,with 继承自 BaseViewModel(这很好用!)。
加载我的 CurrentTable 时,代码如下所示:
public void LoadInitialJsonData()
{
// Fill all table data
QtyTopLevelKeys = BPPCjson_if.BPPCjson_getTableCount(context);
for (int curTableIdx = 0; curTableIdx < QtyTopLevelKeys; curTableIdx++)
{
int qtyRows = // rowCount
int qtyCols = // columnCount
var curDataTable = new DataTable();
// set Header Name for each column
for (int curCol = 0; curCol < qtyCols; curCol++)
{
string curHeader = //unique headername from interface
if (!curDataTable.Columns.Contains(curHeader))
{
curDataTable.Columns.Add(curHeader, typeof(string));
// PropertyChangedEvent has no effect here
}
}
// set Value for each cell
for (int curRow = 0; curRow < qtyRows; curRow++)
{
DataRow curRowData;
curRowData = curDataTable.NewRow();
for (int curCol = 0; curCol < qtyCols; curCol++)
{
string data = //value of cell
curRowData[curCol] = data;
}
curDataTable.Rows.Add(curRowData);
}
curDataTable.TableName = //unique Name
TableInformation ti = new TableInformation(curTableName, qtyRows, qtyCols, curDataTable);
AllTables.Add(ti);
}
}
不幸的是,显示的 Table 看起来像这样:
Cell-values not shown but cells are existing 1
Cell-values not shown but cells are existing 2
你能帮帮我吗?为什么它显示了正确数量的 Rows/Cells 但没有任何内容?
它还说我有绑定错误。但我真的不明白为什么... Binding errors
非常感谢您的帮助!!!
在@ASh 的帮助下,我自己找到了它。
我的“唯一标头名称”确实包含点。
我所做的只是替换谷歌搜索可能有用的东西。