有没有办法避免这种情况。我有很多绑定到DataGridViews的类,它们只是带有默认getter和setter的属性的简单集合。所以这些类非常简单。现在我需要为它们实现INotifyPropertyChanged接口,这将大大增加代码量。有没有什么类可以让我继承来避免写这些无聊的代码呢?我想象我可以从某个类继承我的类,并用一些属性来装饰属性,然后它就会变魔术了。这有可能吗?
我很清楚面向方面的编程,但我更喜欢用面向对象的方式。
发布于 2010-06-28 06:44:02
创建容器基类,例如:
abstract class Container : INotifyPropertyChanged
{
Dictionary<string, object> values;
protected object this[string name]
{
get {return values[name]; }
set
{
values[name] = value;
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
class Foo : Container
{
public int Bar
{
{get {return (int) this["Bar"]; }}
{set { this["Bar"] = value; } }
}
}
注意:非常简化的代码
发布于 2010-06-28 06:43:23
这取决于;您可以使用PostSharp来编写这样的属性,该属性由编织者重写;但是,我可能会尝试手动执行此操作-也许使用处理数据更新的通用方法,例如
private string name;
public string Name {
get { return name; }
set { Notify.SetField(ref name, value, PropertyChanged, this, "Name"); }
}
通过以下方式:
public static class Notify {
public static bool SetField<T>(ref T field, T value,
PropertyChangedEventHandler handler, object sender, string propertyName)
{
if(!EqualityComparer<T>.Default.Equals(field,value)) {
field = value;
if(handler!=null) {
handler(sender, new PropertyChangedEventArgs(propertyName));
}
return true;
}
return false;
}
}
发布于 2010-06-28 07:26:05
如果没有AOP,我认为没有一种简单的方法可以将其改造到现有的类中。不管你怎么做,你至少要改变你所有的属性。
我使用一个继承INotifyPropertyChanged的基类和一个OnPropertyChanged(string propertyName)方法来触发事件。然后,我使用Visual Studio代码片段来创建在属性设置器中自动调用OnPropertyChanged的属性。
https://stackoverflow.com/questions/3130491
复制相似问题