misc.log

日常茶飯事とお仕事と

XAMLでのバインディング

エッセンシャルWPFのサンプルを追いかけ中。XAMLで書いたチェックボックスの文字列に、別のテキストボックスの入力内容をバインドしてみようとして、以下のような記述をしてみた...。

<TextBox x:Name='SampleText'>テキストボックス(編集可能)</TextBox>
<CheckBox Content='{Binding ElementName=SampleText,Path=Text}'>チェックボックス</CheckBox>

で、MSBuildでビルドしてみると

"C:\Temp\WPFTest1\tour.csproj" (既定のターゲット) (1) -> (MarkupCompilePass1 ターゲット) ->
  C:\Temp\WPFTest1\MyWindow.xaml(24,76): error MC3024: 'System.Windows.Controls.CheckBox.Content' プロパティは既に設定されています。設定できるのは一度だけです。 行 24 位置 76.

なんてエラー。何がまずいかというと、すでに「チェックボックス」という文字が入っていることが「1度目のバインド」にあたるみたい。文字列の設定であっても、内部処理ではリソースへのバインドという扱いになってるのね。

<TextBox x:Name='SampleText'>テキストボックス(編集可能)</TextBox>
<CheckBox Content='{Binding ElementName=SampleText,Path=Text}' />

上記のように、初期文字列を無しにしてやれば問題無かった。