ここに示す例は、実装しようとしている実際のUserControlを単純化したものですが、構造を示しており、同じ問題が発生しています。ユーザーコントロールには、ユーザーコントロールXAMLで定義されているテキストブロックのテキストを設定するDependencyPropertyWordsがあります。
public partial class MyControl : UserControl
{
public static readonly DependencyProperty WordsProperty = DependencyProperty.Register("Words", typeof(string), typeof(MyControl));
public MyControl()
{
InitializeComponent();
}
public string Words
{
get { return (string)GetValue(WordsProperty); }
set
{
m_TextBlock.Text = value;
SetValue(WordsProperty, value);
}
INotifyPropertyChanged ViewModelBaseクラスから派生したViewModelは、mainWindowDataContextに割り当てられます。ModelTextプロパティセットはOnPropertyChangedを呼び出します。
class MainWindow : ViewModelBase
{
private string m_ModelString;
public string ModelText
{
get { return m_ModelString; }
set
{
m_ModelString = value;
base.OnPropertyChanged("ModelText");
}
}
}
メインウィンドウでは、XAMLバインディングがUserControlとTextBlockに対して行われます。
<Window x:Class="Binding.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="218" Width="266" xmlns:my="clr-namespace:Binding.View">
<Grid>
<my:MyControl Words="{Binding ModelText}" HorizontalAlignment="Left" Margin="39,29,0,0" x:Name="myControl1" VerticalAlignment="Top" Height="69" Width="179" Background="#FF96FF96" />
<TextBlock Height="21" HorizontalAlignment="Left" Margin="59,116,0,0" Name="textBlock1" Text="{Binding ModelText}" VerticalAlignment="Top" Width="104" Background="Yellow" />
</Grid>
</Window>
バインディングはテキストブロックでは機能しますが、ユーザーコントロールでは機能しません。UserControl DependencyPropertyをコントロールプロパティと同じ方法でバインドできないのはなぜですか?