Est-ce que DependencyPropertys utilise la liaison bidirectionnelle par défaut? Si non, comment spécifiez-vous?Liaison de données de contrôle utilisateur dans Silverlight/MVVM
La raison pour laquelle je demande est que j'ai le contrôle utilisateur suivant qui me cause des problèmes ...
<UserControl x:Class="SilverlightApplication.UserControls.FormItem_TextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<StackPanel Style="{StaticResource FormItem_StackPanelStyle}" >
<TextBlock x:Name="lbCaption" Style="{StaticResource FormItem_TextBlockStyle}" />
<TextBox x:Name="tbItem" Style="{StaticResource FormItem_TextBoxStyle}" />
</StackPanel>
Le code derrière pour ce qui est ...
public partial class FormItem_TextBox : UserControl
{
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(string), typeof(FormItem_TextBox), new PropertyMetadata(string.Empty, ValueChanged));
public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register("Caption", typeof(string), typeof(FormItem_TextBox), new PropertyMetadata(string.Empty, CaptionChanged));
public string Value
{
get { return (String)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public string Caption
{
get { return (String)GetValue(CaptionProperty); }
set { SetValue(CaptionProperty, value); }
}
private static void ValueChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
(source as FormItem_TextBox).tbItem.Text = e.NewValue.ToString();
}
private static void CaptionChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
(source as FormItem_TextBox).lbCaption.Text = e.NewValue.ToString();
}
public FormItem_TextBox()
{
InitializeComponent();
}
}
Dans ma page, j'utilise le contrôle comme ceci ....
<UC:FormItem_TextBox Caption="First Name: " Value="{Binding Path=FirstName, Mode=TwoWay}" />
Mais aucune mise à jour de la zone de texte n'est envoyée au modèle.
Si j'utilise la boîte de texte standard comme celui-ci ....
<TextBlock Text="Firstname:"/>
<TextBox Text="{Binding Path=FirstName, Mode=TwoWay}" />
Ensuite, la liaison de données à deux voies fonctionne perfecly. Des idées ce qui ne va pas avec mon contrôle?
Cheers,
ETFairfax.
Merci pour la réponse Bryant. Je pensais que ça allait être quelque chose comme ça, mais je le trouvais un peu bizarre parce que, le ValueChanged a (source comme FormItem_TextBox) .tbItem.Text = e.NewValue.ToString(); ... quel genre de sentiment que j'allais être en boucle ronde; Est-ce que tu vois ce que je veux dire? Quoi qu'il en soit, ce que vous avez suggéré fonctionne, alors c'est tout ce qui compte !!! Merci. – ETFairfax
Le ValueChanged est de la machine virtuelle au contrôle. Le gestionnaire TextChanged est pour revenir dans l'autre sens. – Bryant