2011-12-22 2 views
1

Я новичок в мире программирования WP7 и .net, и мне нужна помощь. У меня есть пользовательский компонент, который имеет свойство, которое использует привязку шаблона.проблемы с привязкой шаблона и привязкой настраиваемого компонента

<TextBlock Text="{TemplateBinding Info}" FontSize="20" Grid.Row="1" TextWrapping="{TemplateBinding TextWrap}"/> 

Я определил свойства зависимостей в файле .cs.

Теперь в моем Page.xaml я поместил пользовательский компонент, как так,

<rounded:RoundedImageView x:Name="pivotItem1" Info="Test bind" BorderBrush="White" ImageSrc="Images/default_service.png" TextWrap="Wrap"/> 

Который работает нормально, теперь я хочу свойства Информация и TextWrap изменяться динамически на основе некоторых внешних переменных, так что я сделал это

<rounded:RoundedImageView x:Name="pivotItem1" Info="{Binding sopInfo}" BorderBrush="White" ImageSrc="Images/default_service.png" TextWrap="{Binding wrap}"/> 

где sopInfo и обертка являются внешние переменные, определенные в файле подложки CS страницы. Но это не работает, значения Info и TextWrap не изменяются. Как я могу это достичь? Благодаря

ответ

1

Попробуйте установить DataContext вашей страницы, как это:

<phone:PhoneApplicationPage 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" /> 

Затем убедитесь, что sopInfo и wrap являются общедоступными DependancyProperties вашего класса страницы.

public static readonly DependencyProperty sopInfoProperty = 
    DependencyProperty.Register(
    "sopInfo", typeof(String), 
    ); 

public string sopInfo 
{ 
    get { return (string)GetValue(sopInfoProperty); } 
    set { SetValue(sopInfoProperty, value); } 
} 
+0

Спасибо большое! Разве нет другого пути? Это в основном означает, что я должен иметь свойства зависимостей повсюду! –

+0

К сожалению, нет. Это его как это сделать в WPF. Вместо этого вы можете попробовать и реализовать INotifyPropertyChanged, но вам все равно придется вызывать OnPropertyChanged в каждом сеттере. WPF должен иметь механизм для повышения событий при связывании, поэтому для него требуется либо DependancyProperty, либо INotifyPropertyChanged. http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx –