‫お帰りなさい｡
‫このビデオでは､ I notify property changedについて説明します｡
‫このインターフェースは､ プロパティが変更された場合に､
‫何かをトリガーすることができます｡
‫そこで､ グリッドの代わりにスタックパネルを使いたいと思います｡
‫なぜなら､ 物を積み重ねたいからです｡ まず､ 中身を設定するラベルを1番､ そしてこのラベルをこのように閉じます｡
‫そしてその下には､ 値を入力するためのテキストボックスを置きたいと思います｡
‫だから､ ここではテキストブロック......テキストボックスを使うつもりはない｡
‫そんな感じですぐに閉じます｡
‫そして､ テキストボックスには､ 幅100ピクセル､ 高さ30ピクセルのものを用意したい｡
‫そして､ テキストを設定したい｡
‫さて､ テキストはバインドされている必要があるので､ ここではデータバインディングを使用することにします｡
‫そして､ 使いたいパスは1番で､ モードは2ウェイにします｡
‫このモードの意味､ このパスの意味がわかったわけです｡
‫では､ このコードをコピーして､ ここに複製してみましょう｡
‫だから､ 2回コピー＆ペーストする｡
‫だから､ ここはあまり変わらないし､ これは結果的にそうなるんです｡
‫これが結果的に3番になるわけです｡
‫さて､ この1位は何だろうと思われるかもしれませんね｡
‫2番と結果､ まあ1番と2番とかあるからね｡
‫しかし､ これらはあくまでコンテンツです｡
‫名前ではありません｡
‫そのため､ それらに接続したり､ 使用したりするためには､ 後ろのコードに入る必要があるのです｡
‫というわけで､ 実際に新しいクラスを作成することにします｡ メインウィンドウをプログラムとして使用するので､ プログラムに似ています｡
‫しかし､ 私はI notify changedを使いたいので､ このインターフェースを使うには､ これを継承できる新しいクラスを作る必要があります｡
‫というのも､ サンプルのファイルに戻ると､ 1番､ 2番､ 3番という数字があります｡
‫そして､ ここに値を追加し､ そこに値を追加した場合､ 一番下の値は自動的に前の2つの値の合計になるようにしたいのです｡
‫わかりました｡
‫そこで､ そのための新しいクラスを使うことにします｡
‫そして､ このクラスはI notify property changedを継承する必要があります｡
‫そのためには？
‫これを利用するために､ プロパティの変更を通知します｡
‫システムコンポーネントモデルを使用する必要があります｡
‫そこで､ システムコンポーネントモデルを使用することにします｡
‫これで､ インターフェイスが緑色になっているのがわかると思います｡ これは､ Visual Studioのインターフェイスの色である薄緑色で､
‫これで潜在的なエラーを修正できます｡
‫つまり､ このインターフェイスを実装する必要があることがおわかりいただけたと思います｡
‫だから､ そうしようと思っているんです｡
‫そして､ ご覧のように､ このパブリックイベント､ プロパティ変更､ イベントハンドラプロパティ変更があります｡
‫そして､ それを使うために､ void on property changedというプライベートメソッドを作り､ プロパティを取り込む必要があります｡
‫そして､ 私の場合､ このプロパティは文字列になる予定です｡
‫そして､ プロパティが変更されたかどうかを最初にチェックしたいのですが､ プロパティが変更されたのは空ではないので､ ヌルとは等しくありません｡
‫というのも､ そうであるならば､ 先にプロパティを呼び出したいからです｡
‫プロパティを変更しました｡
‫このドットニュープロパティは､ イベントアークを変更したもので､ プロパティに渡すつもりです｡
‫そこで､ プロパティはご覧のようにイベントアークを変更しました｡
‫文字列のプロパティ名が必要である｡
‫そして､ 渡したいのは､ プロパティ名そのものです｡
‫ですから､ on property changeはこのプロパティを呼び出すことになるので､ ここにプロパティを入力します｡
‫わかりました｡
‫そこで､ このプロパティ変更イベントを単純に呼び出すことにします｡
‫そして今､ それらをすべて使うためには､ いくつかのプロパティを用意する必要があります｡
‫そして､ まず最初にプライベートフィールドを作ることから始めます｡
‫つまり､ num1というプライベートな文字列､ 次にnum2というプライベートな文字列､ そして最後にresultというプライベートな文字列です｡
‫そして今､ 私はそれらすべてのプロパティを作成しています｡
‫ということで､ NUM oneというプロパティを作ってみます｡
‫そして､ このナンバーワンプロパティは､ 標準的なものとは少し違うはずです｡
‫この基本的なgetとsetを使うのではなく､ 自分で定義したものを使うので､
‫num oneを返してはいけません｡
‫つまり､ リターン・ナンバー・ワンという名前に変更されるわけです｡
‫だから､ 1番を返せ｡
‫そして､ もし何かを設定したら､ その値を設定したい｡
‫ちなみに､ ここではトップでstringを使っているので､ 私のプロパティもstringであるべきです｡
‫だから､ ナンバーワンを返上する｡
‫そして､ 誰かが数字1を設定しようとしたら､ それを解析したいのです｡ なぜなら､ それがユーザーが入力した数字でなかったらどうするか？
‫もし彼が､ よくわからないが､ 手紙か何かを入力したらどうだろう？
‫それなら､ それをキャッチして変えたい｡
‫そこで､ INTナンバーを使って､ ここに新しいbooを作ります｡ resultはintになるので､
‫パースを試して､ 値をパースして､ 数値を取り出します｡
‫というわけで､ 以前にもtry parseを見たことがあります｡
‫これは単純に､ 与えられた値を解析して整数にしようとするもので､ うまくいった場合はtrueになります｡
‫そして､ うまくいかなかった場合､ それは偽りになってしまうのです｡
‫ちなみに､ うまくいったら､ 番号もそのまま出しますよ｡
‫ですから､ もしプラスの値が出たら､ 1番がその値であると言うことにしています｡
‫また､ 変更したいことやトリガーは､ プロパティが変更され､ NUMの方をトリガーすることにしています｡
‫わかりました｡
‫そこで､ このnum oneのプロパティを値が変わったら変更することにしています｡
‫次に､ これをコピーして､ 2つ目の数字を作ることができます｡
‫だから2番と､ 2番に変えるんです｡
‫また､ 数字になり､ ここでは数字の2､ あちらでも数字になります｡
‫そして､ 最後に結果のプロパティが必要です｡
‫そこで､ そのパブリックな文字列のresultを作成し､ これもgetとsetを持つようにするつもりです｡
‫つまり､ ここで取得したものは､ そのままパスナンバー1という結果になりそうなのです｡
‫プラスはねえよ｡
‫パール家のママは2人｡
‫そして､ なぜ今､ それができるのか？
‫まあ､ 1にして2にしてと､ いつでも返しているからです｡
‫つまり､ ここにあるものは､ 設定されているだけなので､ すでに整数であり､ 数値である場合にのみ値を持つのです｡
‫そうでなければ､ 決して設定されないわけです｡
‫空っぽになるのです｡
‫そして､ 先に進むために必要なことは､ ここに何かを返すことです｡
‫そこで､ レストをストリングに戻すことにする｡
‫もし誰かがその結果を設定しようとしたら､ 次のようにします｡
‫つまり､ set int resultはint parsになるわけです｡
‫実は､ ここでやったことと同じなのですが､ ただ､ 返さずにセットしているのです｡
‫そのため､ 結果は文字列に残ります｡
‫そして､ ここでは UN プロパティを変更したと呼び､ 同じことが数値 2 と数値 1 にも当てはまります｡
‫それで何ができるかというと
‫そこで､ この国連のプロパティを変更しました｡
‫思い起こせば､ プロパティの値を変更するのです｡
‫Property changed event arcsで､ プロパティを取り込み､ このproperty changed
‫eventを呼び出し､ それらのプロパティをすべて呼び出すことになるわけです｡
‫つまり､ 1番目のプロパティ､ 2番目のプロパティ､ そして結果の1つが通知され､ 我々の結果が変更されるはずです｡
‫そこで､ 誰かが数字を入力するたびに､ この3番も変更されるようにしたいのです｡
‫そして､ それを確認したりテストしたりする前に､ 私たちの. 0. 6 ファイルを作成し､ 実際に私たちのいくつかのクラスのオブジェクトを作成します｡
‫それでは､ いくつかのクラスを作成しましたので､ 新しいオブジェクトを作成します｡
‫この上に作成します｡ オブジェクトになるだけでなく､ プロパティも作成します｡
‫つまり､ 何らかのオブジェクトがgetとsetを行うわけです｡
‫そして今､ それにアクセスするために､ 私たちの一部も公開する必要があるのです｡
‫そこで､ このクラスをpublicにして､ このいくつかのオブジェクトを使うことができるようにしましょう｡
‫ここで､ このいくつかのオブジェクトを､ 最初に設定することができます｡
‫そして､ 1番ではない値を1として､ 2番は､ 仮に3という値を持つだけの新しい合計だと言うことにしています｡
‫ご覧のように､ ここでは文字列を使用しなければなりません｡ そうしないと､ これらのプロパティは文字列なので､
‫動作しないからです｡
‫さて､ ここで呼び出したり設定したりする必要があるのは､ データコンテキストをsumオブジェクトに設定することです｡
‫では､ 次にこれを実行してみましょう｡
‫それから､ 3番は設定しないんですね､ これは結果なんですが､ 実際に結果と呼ぶともっといいかもしれません｡
‫では､ ここで､ ラベルをresult､ あるいはsomeに変更してみましょう｡
‫これが和になるわけですね｡
‫もしかしたら､ ノンワンとノンツーのようなものでさえあるかもしれません｡
‫それでは､ もう一度実行してみましょう｡
‫そして､ そこにいるのはあなたです｡
‫1＋3は4である｡
‫では､ 今度は､ 例えば25に変えてみましょう｡
‫そして､ ご覧のように変わりました｡
‫では次に､ 3の値を31に変えてみましょう｡
‫56をご覧ください｡
‫さて､ ここでその値を変えてみると｡
‫ほら､ 「セッター」でやったことが､ 元の値に戻りつつある｡
‫もし誰かが結果を設定しようとしたら､ 私たちは単純に､ やはりエンドパーティ､ ナンバー1､ ナンバー2の値を設定します｡
‫そのため､ 文字列の結果を設定しようとすると､ 常に実際の結果に戻ってしまうのです｡
‫このように､ 好きなように計算して､ リアルタイムに答えを出したり､
‫リアルタイムに値の合計を出したりすることができます｡
‫先に進んでもう1つ追加することもできますし､ 今度はそれを倍率に変えていくこともできます｡
‫でも､ 今となっては､ あれは相当なセットアップが必要だったのだと思います｡
‫もう一度､ 簡単に説明します｡
‫XHTMLファイルでは､ 3つのラベルと3つのテキストボックスがありましたが､ これは単なるUI要素ですよね？
‫そして､ それぞれのテキストがつながっている｡
‫つまり､ こちらにはナンバー1への道､ こちらにはナンバー2への道､ そしてこちらには結果への道があるのです｡
‫そして､ ここにいるのはその人たちです｡
‫だから､ ナンバーワン｡
‫ナンバー2､ ナンバー3のプロパティです｡
‫プロパティ変更イベントハンドラを持つインターフェースである I notify
‫property change を継承したクラスを追加作成しました｡
‫ここで､ on property changeというメソッドを作成しました｡ このメソッドは､ プロパティの1つが変更されるたびに呼び出され､
‫プロパティが設定されると実行されます｡
‫つまり､ この num one というプロパティがあり､ 誰かが NUM one の値を設定しようとすると､ 単純にこの on property
‫changed を呼び出すことになります｡
‫そして､ ここではプロパティを設定します｡ つまり､ 「よし､ プロパティをくれ」と言い､ そのプロパティを与えられた値に変更します｡
‫だから､ かなり私たちが設定するのですが､ 同時に､ セッターの中で､ 今設定しているものだけを設定するわけではありません｡
‫この行を見ると､ このフィールドを設定し､ このプライベート文字列フィールドを変更し､
‫このon property changedは実際にプロパティ自体を変更します｡
‫つまり､ プロパティ自体の値を変更すると同時に､ プロパティの結果の値も変更することになるわけです｡
‫num 1の値を変更するたびに結果が更新されます｡ num
‫2の値も同様で､ 結果が変更されるたびに､ このプロパティ変更メソッドも呼び出されます｡
‫そうですね｡
‫AIをどのように使うか､ プロパティを通知することでこのインターフェースの使い方が変わり､ 複数の異なる方法で使うことができることがお分かりいただけたと思います｡
‫そして､ 何かプロパティが変更されるたびに､ それを使うのがとても面白い｡
‫例えば､ 色が変更され､ 派手なアニメーションを行うイベントを発生させたい､ あるいは誰かがボタンを押すとプログラムのどこかのプロパティが変更され､
‫その後に何か素晴らしいことが起きるとします｡
‫それをすべてこれで設定することができます｡
‫プロパティ変更インターフェイスを通知しました｡
‫もちろん､ 使用するクラスとプロパティの変更を通知する間に､ 継承の相関関係を作成する必要があります｡