WPFのBindで自前のクラスからデータ供給
2018-03-17


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も、同じような感覚で作っていけるのだけど、こうしたちょっとした違いが大変。

[Windowsストアアプリ]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット