新しいコントロールの依存関係プロパティへのバインドに問題があります。
この問題を調べるために、いくつかのテストを作成することにしました。
TextBox.Text から別の TextBox.Text へのバインド
XAML コード:
<TextBox Name="Test" Text="{Binding ElementName=Test2, Path=Text, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Name="Test2" Grid.Row="2" />
結果は良好です-最初のTextBoxに何かを書くと-> 2番目のTextBoxが更新されます(逆にも)。
新しいコントロールを作成しました->たとえば、依存関係プロパティ「SuperValue」を持つ「SuperTextBox」。
XAML コードを制御します。
<UserControl x:Class="WpfApplication2.SuperTextBox"
...
Name="Root">
<TextBox Text="{Binding SuperValue, ElementName=Root, UpdateSourceTrigger=PropertyChanged}" />
</UserControl>
コードビハインド:
public partial class SuperTextBox : UserControl
{
public SuperTextBox()
{
InitializeComponent();
}
public static readonly DependencyProperty SuperValueProperty = DependencyProperty.Register(
"SuperValue",
typeof(string),
typeof(SuperTextBox),
new FrameworkPropertyMetadata(string.Empty)
);
public string SuperValue
{
get { return (string)GetValue(SuperValueProperty); }
set { SetValue(SuperValueProperty, value); }
}
}
OK、そして今テスト!
TextBox.Text から SuperTextBox.SuperValue へのバインド
<TextBox x:Name="Test1" Text="{Binding ElementName=Test2, Path=SuperValue, UpdateSourceTrigger=PropertyChanged}" />
<local:SuperTextBox x:Name="Test2" Grid.Row="2"/>
テストもバッチリ!TextBox に何か書いていると、SuperTextBox が更新されます。SuperTextBox に書き込んでいると、TextBox が更新されます。大丈夫!
今問題:
SuperTextBox.SuperValue から TextBox.Text へのバインディング
<TextBox x:Name="Test1"/>
<local:SuperTextBox x:Name="Test2" SuperValue="{Binding ElementName=Test1, Path=Text, UpdateSourceTrigger=PropertyChanged}" Grid.Row="2"/>
この場合、SuperTextBox に何かを書き込んでも、TextBox が更新されません!
どうすればこれを修正できますか?
PS: 質問が非常に長いので、申し訳ありませんが、問題を正確に説明しようとしました。