Wpf 对动态DataTable的编辑未在DataGrid中更新

Wpf 对动态DataTable的编辑未在DataGrid中更新,wpf,mvvm,datagrid,datatable,Wpf,Mvvm,Datagrid,Datatable,我有一个DataTable,当我改变(添加、修改..等等)时,它不会反映在绑定到DataTable的DataGrid上 ItemsSource="{Binding TableData,Mode=TwoWay,IsAsync=True}" 那是装订^ 现在当我设置RowError时 TableData.Rows[x].RowError = ex.Message; HasError设置为true。。。但是DataGrid并没有反映这一点(我有一个样式,当出现错误时将行标记为红色) 注意:我的更

我有一个DataTable,当我改变(添加、修改..等等)时,它不会反映在绑定到DataTable的DataGrid上

ItemsSource="{Binding TableData,Mode=TwoWay,IsAsync=True}" 
那是装订^

现在当我设置RowError时

TableData.Rows[x].RowError = ex.Message;
HasError设置为true。。。但是DataGrid并没有反映这一点(我有一个样式,当出现错误时将行标记为红色)

注意:我的更改不会反映在设置错误消息之后的更多消息中,我还尝试在ViewModel中添加行,并且这些添加的行也不会重新受到影响

关于数据表:
它没有设置列或任何内容,它会重新显示用户选择的选定数据库表

TableData是什么类型的

如果是
列表
,则更改列表中的项目将更新绑定

如果它是一个
可观察集合
,则更改集合中的项将更新绑定

绑定到
数据表
将不起作用。您需要首先将
数据表
转换为
可观察集合
。发件人:

public void ConvertDataTable(DataTable dt)
{
DataList=新的ObservableCollection();
//扫描数据并将其排列到ObservableCollection中
int UserID=0;
如果(dt.Rows.Count>0)
{
UserID=int.Parse(dt.Rows[0][“UserID”].ToString());
//提取项目id列表
列表投影列表=获取投影列表(dt);
for(int i=0;i

该链接提供了一个更完整的使用数据库和绑定的示例。

它是一个DataTable(公共DataTable TableData)否它是一个TableDate!查看与itemsource绑定的变量。我在问变量是什么类型的。谢谢,那必须这样做。另一种可能性是:
    public void ConvertDataTable( DataTable dt )
    {
        DataList  = new ObservableCollection<ProjectWorkHours>();
        //Scan and arrange data into ObservableCollection
        int UserID = 0;
        if ( dt.Rows.Count >0 )
        {
            UserID = int.Parse( dt.Rows[0]["UserID"].ToString() );
            //Distill project id list
            List<int> ProjectIDList = GetProjectIDList( dt );
            for ( int i = 0 ; i < ProjectIDList.Count; i ++ )
            {
                int ProjectID= ProjectIDList[i];
                //Get WorkRecord
                int[] MyWorkRecord = GetWorkRecord(dt, ProjectID);
                ProjectWorkHours newProjectWorkHours = new ProjectWorkHours(UserID,ProjectID,MyWorkRecord);
                DataList.Add( newProjectWorkHours);
            }           
        } 
    }