Я создаю приложение 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.
Любая помощь на это очень ценится.
Привет Майкл, Спасибо за ваш пост, я бегу в ** ЖЕ ** точный вопрос. Когда я даю свой пользовательский контроль x: Name, привязка данных перестает работать. К сожалению, я не понимаю, что вы имеете в виду ** я изменил ссылки все будут названы ссылки и теперь работает ** Не могли бы вы уточнить. Thanks :) –
'DataContext =" {Binding RelativeSource = {RelativeSource Self}} "- это запах кода. – Will