J'ai un contrôle utilisateur avec un DependencyProperty
de Answer
qui est attaché à un TextBox
.WPF Usercontrol, l'événement TextBox PropertyChanged ne se déclenche pas
J'ai interrogé la base de données et lié la réponse à la commande usercontrol et la valeur correcte est affichée.
Le problème se produit lorsque je modifie le TextBox
, l'événement PropertyChanged ne se déclenche pas et m'empêche donc d'enregistrer la valeur correcte dans la base de données. S'il vous plaît voir ci-dessous mon code.
Usercontrol:
<Grid>
<StackPanel>
<TextBlock Name="txtbQuestion" TextWrapping="Wrap" Text="Question" Foreground="Black" Margin="5" Style="{DynamicResource Label}" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Text}" ></TextBlock>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBox Name="txtAnswer" Margin="5" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" >
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cbMultiLine, Path=IsChecked}" Value="True">
<Setter Property="TextBox.TextWrapping" Value="Wrap" />
<Setter Property="TextBox.Height" Value="100" />
<Setter Property="TextBox.AcceptsReturn" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<CheckBox Name="cbMultiLine" Content="MultiLine" Margin="5" FontFamily="Georgia" Grid.Column="1" />
</Grid>
<Line Fill="Black" Margin="4" />
</StackPanel>
</Grid>
Usercontrol.cs:
public partial class ConditionQuestion : UserControl
{
public static readonly DependencyProperty AnswerProperty =
DependencyProperty.Register("Answer", typeof(string), typeof(ConditionQuestion), new UIPropertyMetadata(null, Answer_PropertyChanged));
public static readonly DependencyProperty QuestionProperty =
DependencyProperty.Register("Question", typeof(string), typeof(ConditionQuestion), new UIPropertyMetadata(null, Question_PropertyChanged));
public ConditionQuestion()
{
InitializeComponent();
}
public string Answer
{
get { return (string)GetValue(AnswerProperty); }
set { SetValue(AnswerProperty, value); }
}
public string Question
{
get { return (string)GetValue(QuestionProperty); }
set { SetValue(QuestionProperty, value); }
}
private static void Answer_PropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
((ConditionQuestion)source).txtAnswer.Text = (string)e.NewValue;
}
private static void Question_PropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
((ConditionQuestion)source).txtbQuestion.Text = (string)e.NewValue;
}
}
exemple Déclarant de Usercontrol:
<ListBox ItemContainerStyle="{StaticResource noSelect}" ItemsSource="{Binding Answer}"
Name="lbQuestions" BorderBrush="#E6E6E6" >
<ListBox.ItemTemplate>
<DataTemplate>
<my:ConditionQuestion Question="{Binding ConditionReportFormQuestions.Question}"
Answer="{Binding Answer, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Je m'excuse d'avance, je suis {relativement} nouveau à WPF. Quelqu'un peut-il voir où je vais me tromper avec ça?
J'ai réussi mes autres commandes usercontrols et mise à jour (ce code est presque une copie exacte) mais les réponses sur eux sont ListBox
sélections où-comme ce usercontrol lie à un TextBox
. Merci d'avance, Kohan.
Désolé, peut-être que je suis bête du tout mais je ne vois pas où la zone de texte txtAnswer est liée à la propriété Answer .. – levanovd
my: ConditionQuestion a une propriété appelée Answer, ceci est un DependencyProperty que j'ai créé. Lorsque cette propriété change, elle met à jour la zone de texte dans le contrôle usercontrol. – 4imble
Mais où est la réaction de la zone de texte? – levanovd