自定义控件Binding依赖属性失败
自定义控件Binding依赖属性失败
场景
编写一个自定义控件,控件中定义一个依赖属性向外暴露允许调用方进行绑定,在控件UI中包含了一个TextBlock控件,TextBlock控件的Text属性绑定到自定义控件的依赖属性上。
实现功能
调用方定义的自定义控件依赖属性绑定源发生改变,控件UI中的TextBlock控件的Text属性值也发生改变。
代码
- Xaml
<TextBlock Text="{Binding TotalCount}" />
- C#
public int TotalCount
{
get { return (int)GetValue(TotalCountProperty); }
set { SetValue(TotalCountProperty, value); }
}
public static readonly DependencyProperty TotalCountProperty =
DependencyProperty.Register("TotalCount", typeof(int), typeof(PagingControl), new FrameworkPropertyMetadata(15, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, TotalCountChangedCallback));
问题
控件UI中的TextBlock控件的Text属性值没有发生改变。
原因
控件UI中的TextBlock控件的Text属性值没有发生改变,因为TextBlock控件的Text属性值没有绑定到自定义控件的依赖属性上。你并没有给它设置DataContext,导致TextProperty这个依赖属性并没有找到源
解决方案
在自定义控件中,将TextBlock控件或其容器控件的DataContext设置为自定义控件的实例。
<UserControl x:Name="pagingControl">
<TextBlock DataContext="{Binding ElementName=pagingControl}" Text="{Binding TotalCount}" />
</UserControl>