在WP7 UserControl中执行DataBinding的正确方法

时间:2011-02-06 22:36:54

标签: silverlight data-binding windows-phone-7

我正在构建一个Windows Phone 7应用程序。所以,我正在使用SilverLight 3(.7),我对我构建的UserControl有点问题。以下是我现在正在做的事情:

UserControl有一个名为Number

的DependencyProperty
<UserControl x:Class="MyUserControl" x:Name="myUserControl">
    <TextBlock Text="{Binding ElementName=myUserControl, Path=Number}"/>
</UserControl>

要使用它,我只是在做:

<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeNumber}">
<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeOtherNumber}">

这一切都很好用,但是如果我为我控制的两个实例中的一个添加一个名字,事情就会变得古怪。例如:

<MyUserControl x:Name="SomeNumberControl"
               Number="{Binding ElementName=MyPage, Path=SomeNumber}">
<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeOtherNumber}">`

然后数据没有显示出来。似乎给出的名称会覆盖UserControl中指定的名称,并且绑定不起作用。

所以,我尝试通过datacontext进行绑定。并将DataContext设置为UserControl。

所以,我的控制成了:

<UserControl x:Class="MyUserControl" 
             DataContext="{Binding RelativeSource={RelativeSource Self}}">  
    <TextBlock Text="{Binding Number}"/>
</UserControl>

这样就没有任何限制。这就像datacontext永远不会设置,甚至更奇怪当我将此控件放在我创建的另一个用户控件中时,看起来父控件现在以某种方式绑定到MyUserControl实例。

所以,当我执行以下操作时:

<MyPage>
    <MyUserControl Number={Binding SomeNumber}"/>

我收到了错误,

在MyUserControl类型中找不到SomeNumber。

就好像父控件的绑定现在是MyUserControl的实例一样。我只是在做我的用户控件中的绑定方面做了一些根本性的错误,或者这对SilverLight 4和WP7来说有点奇怪。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您的代码后面有一个名为Number的依赖属性,则可以设置

DataContext = this;

这应该允许您直接绑定到TextBlock的Number属性。

<TextBlock Text="{Binding Number}"/>