Correct way to do DataBinding in a WP7 UserControl

I'm building a Windows Phone 7 App. So, I'm using SilverLight 3(.7) and I'm having a bit of a problem with the UserControls that I've built. Here's how I'm doing it now:

UserControl has a DependencyProperty named Number

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

To use it I'm simply doing:

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

This all works great, but if I add a name to one of the two instances of my control, things go wacky. For example:

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

Then the data doesn't show up. It appears that the name given overrides the name specified in the UserControl and the bindings don't work.

So, I tried to do binding through the datacontext. And setting the DataContext to the UserControl.

so, my control became:

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

With this nothing gets bound. It's like the datacontext is never set and even weirder when I put this control in another user control that I created, It appears that the parent control is now somehow bound to the MyUserControl instance.

So when I do the following:

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

I get the error,

SomeNumber not found in type MyUserControl.

It's as if the binding for the parent control is now the instance of MyUserControl. Am I just doing something fundamentally wrong in how I'm doing bindings in my user control, or is this something strange with SilverLight 4 and WP7.

Any help on this is greatly appreciated.


If you have a DependecyProperty in your codebehind called Number you can set

DataContext = this;

That should allow you to bind directly to your Number property from TextBlock.

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

上一篇: 用于网格控制的Silverlight并行数据源

下一篇: 在WP7 UserControl中执行DataBinding的正确方法