WPFのBindで自前のクラスからデータ供給 ― 2018年03月17日 13:25
UWPからは利用できないWindowsのAPIにアクセスするため、WPFのアプリに取り組んでいるが、Bindが思うようにいかない。UIの初期化後の画面では、想定するデータが設定されているが、その後の更新を反映しない。GetBindExpressionや、PropertyChangedのイベントハンドラを用意して確認してみると、うまくいきそうなのだけど。
WindowのResourceで、データ供給元の定義。20行目で、システムボリュームに関するデータを供給するクラスを定義。
343行目でSliderの定義。これは、修正後。修正前は、こんな感じ。
Value="{Binding Source={StaticResource SystemVolume}, Path=CurrentVolume, Mode=OneWay}"
345行目は、Sliderの値をTextBlockで表示。隣のSliderからデータを読み取る。これは、問題なく動作する。
いろいろやって、たどりついたのがこちら。
39行目;UIの構築完了を受けて、データ供給元のオブジェクトを生成。
対象のクラスは、INotifyPropertyChangedを実装していること。
49行目;Sliderを格納するGridのDataContextに、生成したオブジェクトを設定。
WPFのBindに関するHow-toの文書に、それらしいことが書いてある(最後の方、Howeverの後)。このあたり、UWPでは静的な定義をきちんとしておけば、よしなにやってくれていた。x:Bind など、使い勝手のよい拡張も進んでいる。
UWPもWPFも、同じような感覚で作っていけるのだけど、こうしたちょっとした違いが大変。
最近のコメント