我正在使用 BindingSource 将单个大型数据结构连接到众多控件(没有SQL,只有一个数据结构,许多控件)。旧式Windows窗体应用程序,Visual Studio 2012 Express。我已经成功地使用属性包装了许多GUI组件,以解决缺乏对单选按钮组,多选列表框,标题栏等控件绑定的直接支持。所有这些都很有效,更新流程在两个方向都很好GUI和数据结构之间。
我需要跟踪是否通过GUI上的任何控件对数据结构进行了任何更改,但我看不到如何执行此操作(我确实在这里查看了以前的相关问题)...这需要提供“已更改但未保存”的简单指示,标题栏中带有星号,如果用户尝试退出应用程序而不保存更改则会发出警告
提前感谢您的帮助!
答案 0 :(得分:0)
您必须在对象类中实现INotifyPropertyChanged接口,然后在DataSource BindingSource属性中通过适当的类型类事件处理程序进行更改时捕获。
以下是一个例子:
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));
}
}
}
}