Karakuri.com

ベンチャー企業で働くソフトウェアエンジニアの技術録

XAMLのBindingが途中で動かなくなる現象の原因を調べてみました

スポンサーリンク

XAMLにBindingしていたプロパティが、あるタイミング以降に変更が反映されなくなる現象に遭遇しました。原因はBindingしているプロパティに値を直接代入するコードが実行されていたためでした。

問題の現象の詳細

問題のコード

<TextBlock Text="{Binding Message}" Name="Message"/>

XamlでViewModelのプロパティにBindingしていたのですが、

private void LostFocus(object sender, EventArgs e)
{
  Message.Text= "Hello";
}

xaml.csのイベントでもBindingしているプロパティを操作していました。

どのような振る舞いだったのか

途中まではBindingが機能していたのですが、xaml.csのイベントが実行されると、以降Bindingは機能しなくなりました。

Bindingしているプロパティを直接操作してはいけない

結論としては、Bindingしているプロパティを直接操作してはいけないということです。操作した瞬間にBindingが解除されるようです。メモしてないので忘れてしまいましたが、出力を確認してみるとBindingが解除されたと通知されていたような気がします。当たり前ではあるんですが、実際に遭遇してみると面白いですね。