当我有这样的界面时:
public interface IClass
{
string { get; set;}
}
还有一个继承接口的类:
using System.Runtime.CompilerServices;
public class MyClass : INotifyPropertyChanged : IClass
{
private string name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return name;}
set
{
name = value;
this.NotifyPropertyChanged();
}
}
public MyClass(string name)
{
this.Name = name;
}
private void NotifyPropertyChanged([CallerMemberName] string caller = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
}
}
我将 DataGridView 数据源绑定到 BindingList,如下所示:
BindingList<MyClass> classes = new BindingList<MyClass>();
MyClass testClass = new MyClass("test1");
MyClass testClass = new MyClass("test2");
classes.Add(testClass);
dataGridView1.DataSource = classes;
每当 name 属性从另一个表单更改时,datagridview 就会更新。但是,当我尝试执行以下操作时,它不起作用。
BindingList<IClass> classes = new BindingList<IClass>();
MyClass testClass = new MyClass("test");
MyClass testClass = new MyClass("test2");
classes.Add(testClass);
dataGridView1.DataSource = classes;
我可能已经追踪到这个问题,当我使用 IClass 的 BindingList 时,当对属性进行更新时,PropertyChanged 事件为空。但是,将 BindingList 用于 MyClass 它不为空。为什么?
这个想法是这样的,可能存在 MyClassA、MyClassB 等,它们具有可以在 datagridview 中显示的相同属性。
附加问题:如果 MyClass 在非 UI 线程中运行并进行更新怎么办。我是否必须保留对主窗体或线程编组控件的引用?或者这只是简单的糟糕设计?
提前致谢。