首页 文章

数据表绑定到表单不起作用

提问于
浏览
0

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

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

TIA .

SAURABH

1 回答

  • 3

    如果您正在使用,那么在您的ViewModel上发送 PropertyChanged 可能不是't getting recognized as changing the bound entity. Fundamentally, DataTable and the child entities don' t支持 INotifyPropertyChangedINotifyCollectionChanged ,因此它们的行为方式与数据绑定不同 .

    要"Hit it with a hammer"你可以尝试使用String.Empty为参数设置Rasing PropertyChanged ,这意味着"re-bind everything",但这可能非常昂贵,具体取决于页面 .

    一些更好的选择:

    您可以尝试在类型化的DataTable类型中实现INotifyCollectionChanged,但这可能会非常麻烦,具体取决于您的架构的复杂程度 .

    一个"more recommended"方法是看看像Entity Framework这样的东西来做你的ORM工作 . 然后,您可以找回可以正确实现 INotifyPropertyChanged 的真实实体 .

    另一种可接受的方法是使用类似AutoMapper的东西将数据表行转换为真正的ViewModel实体和 ObservableCollection<> . 当然,您需要在一天结束时将它们映射回数据存储实体(即那些数据行或其他),但是有很多工具可以使这更容易 .

    一般来说,没有多少人会建议使用DataTables(强类型或其他方式)在应用程序内部移动数据 . 太多有用的工具(例如,验证,ORM,数据绑定)要求您拥有一个可以实现自己的接口的真实对象(例如 INotifyPropertyChanged ) . 如果你正在开发一个相对"Green Field"的应用程序,我会花一点时间使用Entity Framework或LINQ-to-SQL(似乎不赞成使用EF)并查看是否可以使用其中一个(或其他ORM) NHibernate)来满足您的需求 .

相关问题