Правильный способ сделать привязку данных в пользовательском элементе управления WP7 - PullRequest
1 голос
/ 07 февраля 2011

Я создаю приложение для Windows Phone 7. Итак, я использую SilverLight 3 (.7) и у меня возникла небольшая проблема с пользовательскими элементами управления, которые я создал. Вот как я это делаю сейчас:

UserControl имеет свойство DependencyProperty с именем Number

<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 для UserControl.

Итак, мой контроль стал:

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

С этим ничто не связывается. Это похоже на то, что текст данных никогда не устанавливается и даже более странно, когда я помещаю этот элемент управления в другой созданный мной пользовательский элемент управления. Кажется, что родительский элемент управления теперь каким-то образом связан с экземпляром MyUserControl.

Поэтому, когда я делаю следующее:

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

Я получаю ошибку,

SomeNumber не найден в типе MyUserControl.

Как будто привязка для родительского элемента управления теперь является экземпляром MyUserControl. Я просто делаю что-то в корне неправильно в том, как я делаю привязки в моем пользовательском элементе управления, или это что-то странное в SilverLight 4 и WP7.

Любая помощь в этом очень приветствуется.

1 Ответ

0 голосов
/ 07 февраля 2011

Если в вашем коде есть свойство DependecyProperty с именем Number, вы можете установить

DataContext = this;

Это позволит вам связываться напрямую с вашим свойством Number из TextBlock.

<TextBlock Text="{Binding Number}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...