Я делаю приложение для Windows Phone 7 и столкнулся со следующей проблемой: когда я создаю usercontrol, который содержит текстовое поле, и создаю свойство DependencyProperty, чтобы иметь возможность привязать его к данным, свойство для доступа к нему возвращает нуль,и когда я пытаюсь установить текст на что-то, он этого не делает.Я прочитал Здесь , что «Вам нужно вызвать NotifyPropertyChanged () в ваших установщиках для элементов, с которыми вы хотите связать.», Но я не знаю, как это сделать.Есть интерфейс INotifyPropertyChanged, но я не думаю, что мне это нужно, и я не нашел никаких подсказок, как написать его, если бы мне пришлось написать.
Вот мой usercontrol:
<Grid VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="5.18*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Grid.Column="1"
Grid.Row="0"
Text="{Binding Tag}"
Foreground="Black"
Margin="10,0,0,0"
Style="{StaticResource MenuTextStyle}"
TextWrapping="Wrap"/>
<Image Source="../Resources/Graphics/sign_arrow_black.png"
Margin="0,15,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Grid.Column="0"
Grid.Row="1"
Height="30">
</Image>
<TextBox x:Name="ContentBox"
Style="{StaticResource TextBoxStyle}"
VerticalAlignment="Top"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
Grid.Column="1"
Grid.Row="1"
Padding="0,0,0,0"
Margin="0,0,0,0"
BorderThickness="0"
IsReadOnly="{Binding IsReadOnly}"
Text="{Binding TextContent}">
</TextBox>
</Grid>
А вот DependencyProperty: (EDIT: переформатирован)
public static readonly DependencyProperty TextContentProperty = DependencyProperty.Register("TextContent", typeof(string), typeof(LargeTextBox), new PropertyMetadata(default(string)));
public string TextContent
{
get { return (string)GetValue(TextContentProperty); }
set { SetValue(TextContentProperty, value);}
}
PS: я знаю о стилях и шаблонах, но, поскольку у меня та же проблема с более сложными элементами управления, это не вариант.
РЕДАКТИРОВАТЬ: я работал над проблемой и решил вопрос «текст не отображается», и я мог бы поместить текст textboxt на другой элемент управления, но когда я связываю его с данными, он по-прежнему не работает,Я достиг этого, написав ValueChangedCallback:
private static void OnTextPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
LargeTextBox box = (LargeTextBox)sender;
box.ContentBox.Text = box.Text;
if (box.TextChanged != null) box.TextChanged(box, new DependencyPropertyChangedEventArgs());
}
и обработчик события TextChanged текстового поля:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
Text = ContentBox.Text;
}