【问题标题】:DTO and bindingsourceDTO 和绑定源
【发布时间】:2025-12-10 10:05:01
【问题描述】:

我有一个 DTO 类,在我的 WinForms 客户端中,我正在为它创建一个数据源。在表单设计中,我将 bindingsource 绑定到这个数据源,这样所有的控件都会自动绑定。

在代码中,我执行以下操作将绑定源绑定到一个空对象:

public void Clear()
{
    var dto = new MyDTO();
    bindingSource.DataSource = dto;
}

从数据库中获取一个项目并显示它是相似的:

public void Load(int id)
{
    var dto = dtoRequest.Get(id);
    bindingSource.DataSource = dto;
}

但是我想知道数据源设置后数据是否发生了变化。我需要在我的 DTO 类中实现 INotifyPropertyChanged 吗?因为如果是这样的话,它首先会破坏拥有 DTO 的目的。

还有其他解决方案吗?

【问题讨论】:

    标签: c# winforms dto


    【解决方案1】:

    我和你一样开发,使用 DTO 到侧视图。 我从未使用过 INotifyPropertyChanged。如果您想知道数据何时发生更改,您必须仅使用 BindingSource 的事件或在 DTO 中构建属性。

    另外看看我对这篇文章的回答

    How to set values in cells of row in DatagridView when I change field value?

    还有这个著名的问题

    Implementing INotifyPropertyChanged - does a better way exist?

    我希望我已经给你指路了。 如果您有任何问题,请在这里问我。

    请记住,很大程度上取决于我们如何构建开发“框架”。

    通过这个策略我已经完成了我所有的工作,这并不意味着使用 INotifyPropertyChanged 是一个坏主意。

    【讨论】:

    • 我正在调查这些事件。但是,每个属性都会引发 CurrentChanged 和 CurrentItemChanged。
    • PositionChanged 这是最有趣的,我经常使用它。当您从一个对象移动到另一个 BindingSource 时会触发此事件。
    • 链接很有趣。我想要一些类似 bindingSource.HasChanged() 的东西,它会告诉我绑定控件中的数据是否发生了变化。在这种情况下,INotifyPropertyChanged 不适合我的需求。
    • 您可以添加项目以查看属性是否已更改、添加或删除。