我试着为你总结一下:
依赖属性:
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(MyClass), new UIPropertyMetadata(MyDefaultValue));
这是完整的语法,您不必记住它,只需使用 Visual Studio 中的“propdp”片段即可。
“get”必须返回它引用的类型的值(在我的示例中为 int)。每当你打电话
int MyVar = MyProperty;
评估“get”中的代码。
该集合具有类似的机制,只是您有另一个关键字:“value”,它将是您分配给 MyVariable 的值:
MyProperty = 1;
将调用 MyProperty 的“set”,“value”将为“1”。
现在对于 RoutedEvents:
在 C# 中(如在 C++ 中,如果我错了,请纠正我),订阅一个事件,你做
MyProperty.MyEvent += MyEventHandler;
这将调用“添加”-> 您正在向堆栈添加处理程序。现在,由于它不会自动进行垃圾收集,并且我们希望避免内存泄漏,我们这样做:
MyProperty.MyEvent -= MyEventHandler;
这样我们的对象就可以在我们不再需要时安全地处理掉。那是评估“删除”表达式的时候。
这些机制允许您在单个“get”上执行多项操作,WPF 中广泛使用的示例是:
private int m_MyProperty;
public int MyProperty
{
get
{
return m_MyProperty;
}
set
{
if(m_MyProperty != value)
{
m_MyProperty = value;
RaisePropertyChanged("MyProperty");
}
}
}
在实现 INotifyPropertyChanged 的 ViewModel 中,它将通知视图中的绑定该属性已更改并且需要再次检索(因此它们将调用“get”)