2011-02-06 2 views
1

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

UserControl имеет 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}"/> 

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

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

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

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

+0

Привет Майкл, Спасибо за ваш пост, я бегу в ** ЖЕ ** точный вопрос. Когда я даю свой пользовательский контроль x: Name, привязка данных перестает работать. К сожалению, я не понимаю, что вы имеете в виду ** я изменил ссылки все будут названы ссылки и теперь работает ** Не могли бы вы уточнить. Thanks :) –

+0

'DataContext =" {Binding RelativeSource = {RelativeSource Self}} "- это запах кода. – Will

ответ

0

Если у вас есть DependecyProperty в вашем коде номер вызываемого абонента вы можете установить

DataContext = this; 

Это позволит вам связываться непосредственно с вашим номером собственности от TextBlock.

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

Да, я тоже это пробовал.То же самое, кажется, игнорирует, что я привязываюсь к этому, либо в XAML, либо в C#. –

+0

Получаете ли вы какие-либо исключения привязки (проверьте окно вывода). – thomasmartinsen

+0

Думаю, я, возможно, понял это. Я использовал DataContext в разных местах, чтобы выполнить привязку. Поскольку я использую UserControl, а не окно, он является частью дерева отображения любой страницы или окна, в которой он создан, и он наследует datacontext. Это может перезаписать datacontext, особенно если вы установите его в конструкторе. Я изменил ссылки на все, чтобы называть ссылки, и теперь это работает. –

Смежные вопросы