gpt4 book ai didi

wpf - 数据表绑定(bind)到表单不起作用

转载 作者:行者123 更新时间:2023-12-03 11:00:56 25 4
gpt4 key购买 nike

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

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

TIA。

索拉布

最佳答案

如果您在使用的任何 ItemsControl 中直接绑定(bind)到 DataTable 本身,则使用 PropertyChanged在您的 ViewModel 上可能没有被识别为更改绑定(bind)实体。从根本上说,DataTable 和子实体不支持 INotifyPropertyChangedINotifyCollectionChanged ,所以他们没有按照数据绑定(bind)希望的方式行事。

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

一些更好的选择:

您可以尝试在类型化的 DataTable 类型中实现 INotifyCollectionChanged,但这可能会很痛苦,具体取决于您的架构有多复杂。

“更推荐”的方法是考虑使用 Entity Framework 之类的东西来完成您的 ORM 工作。然后您可以取回可以实现 INotifyPropertyChanged 的真实实体。适本地。

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

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

关于wpf - 数据表绑定(bind)到表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2475267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com