WPF Liaison à une propriété personnalisée dans un contrôle personnalisé
J'ai une zone de texte personnalisé défini comme suit:
public class CustomTextBox : TextBox
{
public static DependencyProperty CustomTextProperty =
DependencyProperty.Register("CustomText", typeof(string),
typeof(CustomTextBox));
static CustomTextBox()
{
TextProperty.OverrideMetadata(typeof(SMSTextBox),
new FrameworkPropertyMetadata(string.Empty,
FrameworkPropertyMetadataOptions.Journal |
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(CustomTextBox_OnTextPropertyChanged));
}
public string CustomText
{
get { return (string)GetValue(CustomTextProperty); }
set { SetValue(CustomTextProperty, value); }
}
private static void CustomTextBox_OnTextPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
CustomTextBox customTextBox = d as CustomTextBox;
customTextBox.SetValue(CustomTextProperty, e.NewValue);
}
}
Je suis la liaison du Texte Personnalisé à la propriété dans le code XAML -
<local:CustomTextBox CustomText="{Binding ViewModelProperty}" />
Le problème que je me pose, c'est que quand j'ai rien entrer dans le CustomTextBox, les modifications ne sont pas répercutées dans le ViewModelProperty c'est à dire la ViewModelProperty n'est pas mis à jour. Le CustomTextProperty est d'obtenir des mises à jour mais je suppose que j'ai besoin de faire quelque chose de plus pour faire la liaison.
Que suis-je pas en train de faire? Je vous serais reconnaissant de toute aide à ce sujet.
Merci
Ce que vous essayez d'accomplir avec le PropertyChanged de rappel? Pour moi, il semble, comme vous venez de définir une nouvelle valeur, c'est pourquoi ce rappel a été appelé, une fois encore, qui heureusement est piégé par wpf sinon vous auriez une boucle sans fin.
OriginalL'auteur Duke Cyrillus | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Je suppose que la liaison doit être dans les deux sens.
Vous n'avez pas besoin de spécifier le
Mode
si vous avez fait leCustomText
propriété de lier deux-chemin par défaut:Vous pouvez également définir une PropertyChangedCallback pour la
CustomText
bien que les mises à jour de laText
de la propriété (c'est à dire l'autre sens de ce que vous avez mis en œuvre maintenant). Sinon, la zone de texte ne s'affiche pas tout ce qui est initialement contenues dans le ViewModel de la propriété et de cours woudln pas être mis à jour lorsque le ViewModel des modifications de la propriété.Ne ressemble pas à quelque chose qui a à voir avec cette propriété, ou la liaison. Ce que cela signifie exactement "l'actualisation de la page"?
Il y a un bouton qui effectue une validation sur tous les champs (ce qui est fait à l'aide de IDataErrorInfo et re-affectation de chaque propriété de sa valeur). Lorsque je clique sur ce bouton, il va à travers les validations sans aucun problème, mais une fois qu'ils ont terminé, l'application génère l'exception mentionnée ci-dessus. J'ai essayé de supprimer la liaison (et en utilisant la zone de texte du Texte à la propriété) et il a très bien fonctionné. Quand je lier la CustomText/propriété de Texte, j'obtiens l'exception, c'est pourquoi je suppose que c'est la liaison qui est à l'origine de problèmes.
Toujours difficile de dire ce qu'est exactement le paramètre nommé "clé", qui est nulle. C'est peut-être votre
ViewModelProperty
qui ne peut pas être null? Peut-être vous avez besoin de spécifierstring.Empty
comme valeur par défaut pour votreCustomText
de la propriété.Le ViewModelProperty peut être nul - c'est une valeur non valide, mais il est censé être manipulés lors des validations qui est au travail, c'est à dire le message d'erreur est attribuée correctement pour que le scénario. J'ai fait de spécifier une valeur par défaut pour CustomText ainsi juste au cas où, mais ça ne marche toujours pas. La trace de la pile pour que l'exception ne m'aide pas beaucoup non plus puisqu'il n'a pas de point à quelque chose dans mon code
OriginalL'auteur Clemens