依赖项属性声明必须如下所示:
public static readonly DependencyProperty TestProperty = DependencyProperty.Register( "Test", typeof(string), typeof(MyControl), new Propertymetadata("DEFAULT"));public string Test{ get { return (string)GetValue(TestProperty); } set { SetValue(TestProperty, value); }}UserControl的XAML中的绑定必须将控件实例设置为源对象,例如通过设置Bindings的
RelativeSource属性:
<UserControl x:Class="WpfTest.MyControl" ...> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/></UserControl>同样非常重要, 永远不要
DataContext在其构造函数中设置UserControl的。我肯定有类似的东西
DataContext = this;
删除它,因为它有效地防止了从UserConrol的父类继承DataContext。
通过
Source = DataContext在后面的“绑定中的代码”中进行设置,您可以显式设置绑定源,而在
<local:MyControl Test="{Binding MyText}" />绑定源隐式为当前DataContext。但是,该DataContext是通过UserControl的构造函数中对UserControl本身的分配来设置的,而不是从窗口继承的DataContext(即视图模型实例)。



