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

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

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有点奇怪。

任何帮助,这是非常感谢。


如果您的代码隐藏名为Number的DependecyProperty可以设置

DataContext = this;

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

<TextBlock Text="{Binding Number}"/>
链接地址: http://www.djcxy.com/p/22787.html

上一篇: Correct way to do DataBinding in a WP7 UserControl

下一篇: Silverlight Memory Leak