かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[WPF][C#]DependencyObjectって その7

その6:http://blogs.wankuma.com/kazuki/archive/2008/03/02/125877.aspx

DependencyObject関連のことを書いてたのは、ほぼ1年前かぁ。結構昔でびっくりした。
さて、今回は、プロパティの変更時に任意の処理を実行する方法について書こうと思う。

DependencyObjectを定義する側での、プロパティの変更時の処理の書き方は、その2で書いています。
今回は、DependencyObjecを使う側の立場の人がプロパティの変更時の処理を書く方法をやります。

まず、DepObjEduという名前でコンソールアプリケーションを作ります。そして、PresentationCore, PresentationFramework, WindowsBaseの3つを参照に追加します。

次に、Program.csの中に以下のようなクラスを定義します。
いつもどおりのPersonクラスでDependencyPropertyのNameを持ってるだけのシンプル構造です。

public class Person : DependencyObject
{
    // デフォルト値がnullのNameプロパティ
    public static readonly DependencyProperty NameProperty =
        DependencyProperty.Register("Name", typeof(string), typeof(Person), new UIPropertyMetadata(null));
    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
}

こいつのインスタンスを作って、Nameプロパティが変更されるたびに、名前変えましたね?と表示するアプリケーションを作ってみようと思う。
プロパティが変更されたときの処理を書くためには、System.ComponentModel.DependencyPropertyDescriptorクラスを使う。使い方は以下のような感じになる。

static void Main(string[] args)
{
    var p = new Person();

    // DependencyPropertyDescriptorを取得
    var desc = DependencyPropertyDescriptor.FromProperty(Person.NameProperty, typeof(Person));
    
    // インスタンス変数pのNameプロパティが変更したときに呼び出される処理を登録
    desc.AddValueChanged(p, (sender, e) => Console.WriteLine("改名しましたね?"));

    p.Name = "ほげ"; // 改名しましたね?が表示される
    p.Name = "もげ"; // 改名しましたね?が表示される
    p.Name = "もげ"; // 値が変わってないので何も表示されない
}

DependencyPropertyDescriptor.FromPropertyでDependencyPropertyDescriptorのインスタンスを取得する。
メソッドの引数には、DependencyPropertyのインスタンスと、オーナー?の型を指定する。

そして、取得したDependencyProeprtyDescriptorのAddValueChangedにデリゲートを渡すと登録完了。
Nameプロパティの値を変更すると、改名しましたね?と表示される。

PropertyChangedイベントがすんなりあったほうが嬉しかった気もする今日この頃でした。
(これはこれで、PropertyChanged系よりいい所もあるけど)

投稿日時 : 2009年1月9日 0:23

Feedback

# re: [WPF][C#]DependencyObjectって その7 2009/01/09 1:19 えムナウ

>PropertyChangedイベントがすんなりあったほうが嬉しかった気もする今日この頃でした。
あれ、PropertyChangedCallback をご自分で紹介してたんじゃなかったでしたっけ?
http://blogs.wankuma.com/kazuki/archive/2008/01/29/119892.aspx

必要なら INotifyPropertyChanged を Person に実装して PropertyChangedCallback でファイアしろって設計思想だと思います。

DependencyPropertyDescriptor はデザイナ アプリケーション用なので基本的には Microsoft や Control メーカーが使うために用意されているものです。

# re: [WPF][C#]DependencyObjectって その7 2009/01/09 1:28 えムナウ

普通に Name の set でファイアしてもいいですしね。

# re: [WPF][C#]DependencyObjectって その7 2009/01/09 7:24 かずき

今回の例だとPersonクラスを使うという立場の人がNameプロパティの変更を監視したいと思ったときに何があるかな~と思って調べた結果です。
デザイナアプリケーションから使われるものだけど、これしか手がみつかりませんでした。

# re: [WPF][C#]DependencyObjectって その7 2009/01/09 15:14 えムナウ

クラス設計者としてはイベント監視されると自分の Dispose でメモリを解放する権利を奪われるんです。
なので WeakEvent なんていう概念もあるぐらいです。
私は DependencyPropertyDescriptor の利用はお勧めしません。

# sac lancel pas cher 2012/10/19 13:42 http://www.saclancelpascher2013.com

I like this web blog so much, saved to my bookmarks. "Nostalgia isn't what it used to be." by Peter De Vries.

# moncler online 2012/12/08 5:42 http://supermonclercoats.webs.com/

I like this post, enjoyed this one appreciate it for putting up. "To the dull mind all nature is leaden. To the illumined mind the whole world sparkles with light." by Ralph Waldo Emerson.

# sacs longchamps 2012/12/17 2:45 http://www.longchampfr.info/category/sac-longchamp

Those are incredibly more awesome. Looks like klipsch is absolutely made to partner with iProducts? I desire android versions!

# トリーバーチ店舗安い 2012/12/17 21:06 http://www.torybruchjp.info/category/トリーバーチ-店舗

The only people that would search good carrying these fugly things will be Ferrari opening crew within the pits:D

# isabel marant baskets 2012/12/18 2:04 http://isabellemarantbaskets.webnode.fr

It's O . K .. You can nevertheless be a bebo star =)

# sac longchamp 2012/12/18 20:55 http://www.longchampfr.info/category/longchamp-pas

I definitely like em. It's nothing like you slip on these out walking around town folks.

# burberry uk 2012/12/21 5:02 http://burberryukoutlets.wordpress.com

Think it like a journal or maybe a magazine involving general interest for anybody to go through. Funny, witty, controversial, entertaining, useful, acerbic, thoughtful, serious, curious, unexpected comebacks are welcome.

# http://www.destockchinefr.fr/veste-marque-pas-cher/veste-ed-hardy-pas-cher/ 2013/01/13 4:39 http://www.destockchinefr.fr/veste-marque-pas-cher

Inside of prosperity's sake the best pals fully understand united states; inside misfortune we understand the best pals.
http://www.destockchinefr.fr/veste-marque-pas-cher/veste-ed-hardy-pas-cher/ http://www.destockchinefr.fr/veste-marque-pas-cher/veste-ed-hardy-pas-cher/

# . 2013/01/14 4:36 http://www.destockchine.com/

True love is normally frail in delivery, but it surely thrives more substantial with age if at all very well fed.
. http://www.destockchine.com/

# destockjeans 2013/02/28 22:24 http://www.g77.fr/

Really do not to understand in which are comfortable to get along with. It's the perfect time who will pressure a single lever tumbler that you are increase. destockjeans http://www.g77.fr/

# www.F77.fr 2013/03/05 0:34 http://www.f77.fr/

Once you would likely prevent your strategy via an enemy, convey to the situation never an acquaintance. www.F77.fr http://www.f77.fr/

# casquette unkut 2013/03/05 0:35 http://www.b66.fr/

Preceptor‘testosterone levels have a shot at so difficult, a good problems can come when we smallest depend on it to. casquette unkut http://www.b66.fr/

# flightclubny 2013/03/05 0:35 http://www.jordanretro10air.com/

Will not lour, whether or not you might be pathetic, do it yourself can never predict who might be dropping in love with your entire grinning. flightclubny http://www.jordanretro10air.com/

# K88.fr 2013/03/05 0:36 http://www.k88.fr/

Don‘big t spend your energy and time on the man or woman/great lady,who exactly isn‘big t ready spend their very own spare time giving you. K88.fr http://www.k88.fr/

# jordanretro4air.com 2013/03/05 0:37 http://www.jordanretro4air.com/

One particular sister are not friends, still friends are normally a suitable sister. jordanretro4air.com http://www.jordanretro4air.com/

# destockchine 2013/03/05 0:38 http://www.c55.fr/

The particular worst type of option to lose a person has to be seated precise beside the group figuring out you could potentially‘h keep these things. destockchine http://www.c55.fr/

# reduction la redoute 2013/03/06 14:56 http://www.k77.fr/

Happen to be very last when equally partner is certain fresh a small transcendence during the other. reduction la redoute http://www.k77.fr/

# code la redoute 2013/03/06 20:53 http://www.k77.fr/

Satisfaction is often a essence you simply can't rain buckets in some others without any acquiring a number of is catagorized in your self. code la redoute http://www.k77.fr/

# Air Jordan Retro 3 2013/03/06 20:53 http://www.jordanretro3air.com/

Have on‘d waste your time , effort for a the human race/young lady,who seem to isn‘d willing to waste these some time giving you. Air Jordan Retro 3 http://www.jordanretro3air.com/

# jordan 11 2013/03/06 20:55 http://www.nikerow.com/

Have a passion for is actually fallible from begin, nonetheless gets much better with age with the price of appropriately provided. jordan 11 http://www.nikerow.com/

# Casquette Chicago Bulls 2013/03/14 4:39 http://www.c88.fr/

Hardly ever frown, despite the fact that you were upsetting, since we never know that's thinning gets interested your entire grin. Casquette Chicago Bulls http://www.c88.fr/

# casquette supreme 2013/03/15 4:58 http://www.b44.fr/

I prefer happened attributable to you, although attributable to what people We are as i in the morning for you. casquette supreme http://www.b44.fr/

# casquette gavroche 2013/03/24 11:17 http://d88.fr/

Low woman or man will probably be worth a person's holes, as well as the person who is normally triumphed‘tonne make you shout. casquette gavroche http://d88.fr/

# Destockage vetement 2013/04/03 7:01 http://www.ruenike.com/vetement-femme-c-16.html/

Adore might be the involved challenge for your lifespan and the growth of whatever people fancy. Destockage vetement http://www.ruenike.com/vetement-femme-c-16.html/

# coachoutletcoupon55.com 2013/04/07 14:36 http://www.coachoutletcoupon55.com/

It could be that Deity expects you and me to get to know two or three entirely wrong individuals just before assembly right, to ensure that when we conclusively fulfill the man, we are going to get experience to you should be pleased. coachoutletcoupon55.com http://www.coachoutletcoupon55.com/

# tati 2013/04/08 0:26 http://ruenee.com/

No woman or man will all of your tears, also , the one that is simply gained‘to enable you to be outcry. tati http://ruenee.com/

# Wow! After all I got a webpage from where I know how to actually take helpful facts concerning my study and knowledge. 2021/07/27 8:09 Wow! After all I got a webpage from where I know h

Wow! After all I got a webpage from where I know how to actually take helpful facts concerning my study and
knowledge.

# Undeniably believe that which you stated. Your favorite justification seemed to be on the web the easiest thing to be aware of. I say to you, I certainly get irked while people consider worries that they just don't know about. You managed to hit the na 2021/08/04 6:57 Undeniably believe that which you stated. Your fav

Undeniably believe that which you stated. Your favorite justification seemed to be on the
web the easiest thing to be aware of. I say to you,
I certainly get irked while people consider worries that they just
don't know about. You managed to hit the nail upon the top as well as defined out the
whole thing without having side-effects , people can take a signal.
Will likely be back to get more. Thanks

タイトル
名前
Url
コメント