繁体   English   中英

在WP7用户控件中进行数据绑定的正确方法

[英]Correct way to do DataBinding in a WP7 UserControl

我正在构建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有点奇怪。

在此方面的任何帮助将不胜感激。

如果您的代码背后有一个DependecyProperty(称为Number),则可以设置

DataContext = this;

那应该允许您直接从TextBlock绑定到Number属性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM