WPFネタですよ。
コントロールを拡張する場合にイベント拾うだけってのと、継承するってのがあります。
独自のUserControlでもそうですが、CLRプロパティ(普通のpublic bool x{get;set;}などのことをこういう)は、XAMLから使えないので推奨されません。
public static readonly DependencyProperty データProperty = DependencyProperty.Register("データ", typeof(string), typeof(xxxclass));
public static RoutedEvent データ変更Event = EventManager.RegisterRoutedEvent("データ変更", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(xxxclass));
public event RoutedEventHandler データ変更
{
add
{
AddHandler(データ変更Event, value);
}
remove
{
RemoveHandler(データ変更Event, value);
}
}
public string データ
{
get { return (string)GetValue(データProperty); }
set {
SetValue(データProperty, value);
RaiseEvent(new RoutedEventArgs(データ変更Event));
}
}
依存プロパティにはPropertyをつける、CLRプロパティはそのままの名前でセッタゲッタをつくる、GetValue,SetValueは自前で作ってもいいけど、 コントロールの依存ツリーの上のほうにいてるDependencyObjectが持っているので自作しないってのがポイントです。
今回はイベントも作っていますが、通常は作る必要はないと思います。XAMLでバインドしている場合にはバインド側で検知できるからです。
作る場合には上記のようにEventManagerを使って登録します。利用する場合にはこちらもRaiseEventってのを使います。こちらはUIElementに実装されています。C#独特のevent == nullをせずにVBのように無条件に呼び出して問題ありません。
実態はstaticにあり、どのインスタンスにどのメソッドが結びついているのかいないのかはWPFエンジンが理解できるからです。その代りeventを独自実装する必要がありますが。