Я попытаюсь подвести итог для вас:
Свойство зависимости:
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));
Это полный синтаксис, вам не нужно его запоминать, просто используйтеФрагмент «propdp» в Visual Studio.
«get» должен возвращать значение того типа, на который он ссылается (в моем примере это int).Всякий раз, когда вы вызываете
int MyVar = MyProperty;
Оценивается код внутри "get".
В наборе есть похожий механизм, только у вас есть другое ключевое слово: "value", которое будет значением, которое вы назначите MyVariable:
MyProperty = 1;
Будет вызывать "set" из MyProperty, а "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");
}
}
}
, которыйво ViewModel, который реализует INotifyPropertyChanged, уведомит привязки в вашем View, что свойство изменилось и его необходимо получить снова (поэтому они будут вызывать «get»)