是否已通过绑定源更改数据源

本文关键字:数据源 已通过 绑定 是否 | 更新日期: 2023-09-27 18:34:14

>我正在使用BindingSource将单个大型数据结构连接到许多控件(没有SQL,只有一个数据结构,很多控件(。旧式 Windows 窗体应用程序,Visual Studio 2012 Express。我已经设法将许多 GUI 组件与属性包装在一起,以解决缺乏对单选按钮组、多选列表框、标题栏等内容的控件绑定的直接支持的问题。所有这些都很好用,更新在GUI和数据结构之间的两个方向上都很好地流动。

我需要跟踪是否通过 GUI 上的任何控件对数据结构进行了任何更改,但我看不到如何做到这一点(我确实在这里查看了以前的相关问题(......这需要提供"已做但未保存的更改"的简单指示,标题栏中带有星号,如果用户尝试退出应用程序而不保存更改,则发出警告。

提前感谢任何帮助!

是否已通过绑定源更改数据源

您必须从对象类中实现 INotifyPropertyChanged 接口,然后在发生更改时通过数据源绑定源属性中类型类的适当事件处理程序进行捕获。

下面是一个示例:

using System;
using System.ComponentModel;
namespace ConsoleApplication1
{
    internal class Program
    {
        class Notifications
        {
            static void Main(string[] args)
            {
                var daveNadler = new Person {Name = "Dave"};
                daveNadler.PropertyChanged += PersonChanged;
            }
            static void PersonChanged(object sender, PropertyChangedEventArgs e)
            {
                Console.WriteLine("Something changed!");
                Console.WriteLine(e.PropertyName);
            }
        }
    }
    public class Person : INotifyPropertyChanged
    {
        private string _name = string.Empty;
        private string _lastName = string.Empty;
        private string _address = string.Empty;
        public string Name
        {
            get { return this._name; }
            set
            {
                this._name = value;
                NotifyPropertyChanged("Name");
            }
        }
        public string LastName
        {
            get { return this._lastName; }
            set
            {
                this._lastName = value;
                NotifyPropertyChanged("LastName");
            }
        }
        public string Address
        {
            get { return this._address; }
            set
            {
                this._address = value;
                NotifyPropertyChanged("Address");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}