Wpf 与表单的Datatable绑定不起作用

Wpf 与表单的Datatable绑定不起作用,wpf,mvvm,binding,Wpf,Mvvm,Binding,我有一个表单,有4个标签,这些标签值显示在4个文本框中,我正在使用MVVM并将这些文本框与通过类型化数据集提供的Datatble绑定。这里的问题不是当我在datatable中添加一个新行,并使用默认列值,并通过调用viewmodel中的onpropertychanged事件来更新ui时,这些值不会反映在表单上 在表中添加新行之前,我先删除所有以前的行,然后添加 蒂亚 Saurabh如果您在使用的任何ItemsControl中直接绑定到DataTable本身,那么在ViewModel上rasing

我有一个表单,有4个标签,这些标签值显示在4个文本框中,我正在使用MVVM并将这些文本框与通过类型化数据集提供的Datatble绑定。这里的问题不是当我在datatable中添加一个新行,并使用默认列值,并通过调用viewmodel中的onpropertychanged事件来更新ui时,这些值不会反映在表单上

在表中添加新行之前,我先删除所有以前的行,然后添加

蒂亚


Saurabh

如果您在使用的任何ItemsControl中直接绑定到DataTable本身,那么在ViewModel上rasing
PropertyChanged
可能不会被识别为更改绑定的实体。基本上,DataTable和子实体不支持
INotifyPropertyChanged
INotifyCollectionChanged
,因此它们的行为方式与数据绑定所希望的不同

要“用锤子敲打”,您可以尝试使用String.Empty作为参数Rasing
PropertyChanged
,这意味着“重新绑定所有内容”,但这可能会非常昂贵,具体取决于页面

一些更好的选择:

您可以尝试在类型化的数据表类型中实现INotifyCollectionChanged,但这可能会非常痛苦,具体取决于您的模式有多复杂

一种“更推荐的”方法是考虑使用类似实体框架的方法来完成ORM工作。然后,您可以返回可以正确实现
INotifyPropertyChanged
的真实实体

另一种可接受的方法是使用AutoMapper之类的工具将数据表行转换为真实的ViewModel实体和
ObservableCollection
s。当然,您需要在一天结束时将它们映射回您的数据存储实体(无论是那些数据行还是其他什么),但是有很多工具可以让这变得更容易


一般来说,不再有很多人推荐使用DataTables(强类型或其他)在应用程序中移动数据。太多有用的工具(如验证、ORM、数据绑定)要求您拥有一个可以在其上实现自己接口的真实对象(如INotifyPropertyChanged)。如果您正在开发一个相对“绿色领域”的应用程序,我会花一点时间研究Entity Framework或LINQ to SQL(它似乎不赞成使用EF),看看您是否可以使用其中的一个(或其他类似NHibernate的ORM)满足您的需要。

如果您在使用的任何ItemsControl中直接绑定到DataTable本身,那么在ViewModel上rasing
PropertyChanged
可能不会被识别为更改绑定的实体。基本上,DataTable和子实体不支持
INotifyPropertyChanged
INotifyCollectionChanged
,因此它们的行为方式与数据绑定所希望的不同

要“用锤子敲打”,您可以尝试使用String.Empty作为参数Rasing
PropertyChanged
,这意味着“重新绑定所有内容”,但这可能会非常昂贵,具体取决于页面

一些更好的选择:

您可以尝试在类型化的数据表类型中实现INotifyCollectionChanged,但这可能会非常痛苦,具体取决于您的模式有多复杂

一种“更推荐的”方法是考虑使用类似实体框架的方法来完成ORM工作。然后,您可以返回可以正确实现
INotifyPropertyChanged
的真实实体

另一种可接受的方法是使用AutoMapper之类的工具将数据表行转换为真实的ViewModel实体和
ObservableCollection
s。当然,您需要在一天结束时将它们映射回您的数据存储实体(无论是那些数据行还是其他什么),但是有很多工具可以让这变得更容易


一般来说,不再有很多人推荐使用DataTables(强类型或其他)在应用程序中移动数据。太多有用的工具(如验证、ORM、数据绑定)要求您拥有一个可以在其上实现自己接口的真实对象(如INotifyPropertyChanged)。如果您正在开发一个相对“绿色领域”的应用程序,我会花一点时间研究Entity Framework或LINQ to SQL(它似乎不赞成使用EF),看看您是否可以使用其中的一个(或其他类似NHibernate的ORM)满足您的需要。

您可以提供用于绑定值的XAML吗?您可以提供用于绑定值的XAML吗?