编辑动态DataTable不在DataGrid中更新

时间:2012-01-12 16:24:16

标签: wpf mvvm datagrid datatable

我有一个DataTable,当我改变(add,modifiy..ect)时,它不会反映在绑定到DataTable的DataGrid上。

ItemsSource="{Binding TableData,Mode=TwoWay,IsAsync=True}" 

那是绑定^

现在我设置了RowError

TableData.Rows[x].RowError = ex.Message;

HasError被设置为true ...但DataGrid没有反映这一点(我有一个样式,当出现错误时将行标记为红色)

注意:我的更改没有反映在设置ErrorMessages之上,我还尝试在ViewModel中添加行,并且这些添加的行也没有被重新生成。

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

2 个答案:

答案 0 :(得分:1)

绑定到DataTable将无效。您需要先将DataTable转换为ObservableCollection<>。来自here

    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);
            }           
        } 
    }

该链接有一个更完整的例子,可以使用数据库并使用绑定。

答案 1 :(得分:0)

TableData是什么类型的?

如果是List<>,则更改列表中的项目更新约束 如果是ObservableCollection<>,那么更改集合中的项目将更新绑定