3

我试图让Windows Phone 7中的用户控件工作。我有几个属性,我想要绑定到,但他们不填充无论我是否将它们添加为DependencyProperties或不。我可以让他们工作的唯一方法就是设置DataContext。我试过的代码是(对于一个属性):Windows Phone - DependencyProperties

public static readonly DependencyProperty MaximumItemsProperty = DependencyProperty.Register("MaximumItems", typeof(int), typeof(ManageIngredientsControl), new PropertyMetadata(0)); 
     /// <summary> 
     /// Gets or sets the maximum number of items to match. 
     /// </summary> 
     /// <value>The maximum number of items to match.</value> 
     public int MaximumItems 
     { 
      get { return Convert.ToInt32(base.GetValue(MaximumItemsProperty)); } 
      set { base.SetValue(MaximumItemsProperty, value); } 
     } 

<TextBox Grid.Row="1" Grid.Column="1" x:Name="nudMaxIngredients" Width="120" Text="{Binding MaximumItems,Mode=TwoWay,ElementName=root}" InputScope="Number" /> 

根UserControl元素被称为'root',但该值未被填充。得到一半的工作的唯一方法是通过使用这样的:

public int MaximumItems 
{ 
    get { return Convert.ToInt32(DataContext) } 
    set { DataContext = value; } 
} 

似乎有什么地方的干扰与DataContext的,但如果我绑定到DependencyProperties它为什么会事?

+0

这可能与DataContext继承有关,但我需要查看其余的视觉hiearchy能够告诉。您可以将Silverlight Spy与WP7一起用于查询可视化树,并查看DataContext在任何时候的用途。输出窗口中是否有任何绑定错误? – 2011-04-19 15:52:27

+0

谢谢,优秀的工具。 datacontext似乎从父视图模型继承,通过用户控件并继续到ta4rget文本框。我仍然不明白为什么它不绑定到依赖项属性。见http://img600.imageshack.us/img600/2835/datactx.th.png – Echilon 2011-04-19 16:25:08

回答

2

我猜你的TextBox是在你的UserControl中。如果是这样,那么ElementName绑定有一个问题,如here所述。

基本上,您给它的XAML中的UserControl的名称会被使用它的任何名称(即在您的页面中)覆盖。

的解决方法是使用类似:

<TextBox Grid.Row="1" Grid.Column="1" x:Name="nudMaxIngredients" Width="120" Text="{Binding Parent.MaximumItems,Mode=TwoWay,ElementName=LayoutRoot}" InputScope="Number" /> 

哪里LayoutRoot是UserControl的XAML内部根控制。

此外,您的MaximumItems属性的第一种方法是正确的。

+0

很高兴知道这是一个错误,而不是缺乏支持或其他。谢谢。 – Echilon 2011-04-19 20:28:33