Je travaille sur une application WPF en utilisant MVVM. Sur les fenêtres principales est une liste déroulante des noms des clients. Quand un client est sélectionné, je veux montrer les adresses pour cela.WPF Contrôle Utilisateur MVVM
Je créé un contrôle utilisateur d'adresses et dans le code de la commande derrière j'ai ajouté un DP:
public static DependencyProperty CustomerIdProperty =
DependencyProperty.Register("CustomerId", typeof(int), typeof(AddressView));
public int CustomerId
{
get { return (int)GetValue(CustomerIdProperty); }
set { SetValue(CustomerIdProperty, value); }
}
Ensuite, dans la fenêtre principale, je lie le combo à CustomerId DP du contrôle de l'utilisateur:
<vw:AddressView Grid.Row="1"
Grid.Column="0"
x:Name="AddressList"
CustomerId="{Binding ElementName=CustomersList, Path=SelectedCustomer.Id, Mode=TwoWay}"/>
J'ai maintenant un problème et une question:
problème: Quand je lance cela et sélectionnez un client, le poseur sur le DP ne se déclenche jamais. La propriété SelectedCustomer de la fenêtre principale se déclenche, mais pas le point de détection dans le contrôle utilisateur. Question: Comment le ViewModel pour le contrôle connaît-il le CustomerId dans le DP?
J'ai créé une application petit échantillon ici pour montrer ce que je fais:
Je vous serais reconnaissant toute aide à ce sujet.
Merci
Si la propriété de dépendance est définie via des liaisons, Get/Set ne sera pas appelé, uniquement pour l'utilisation dans le code local. Vous pouvez ajouter un PropertyChangedCallback à votre MetaData DependencyProperties si vous avez besoin de le vérifier –
Ok , Je vois. Mais cela ne répond toujours pas à la question de savoir comment la valeur de l'ID client dans le code derrière arrive à ViewModel? – CoderForHire
@kmarois: Via le système de reliure.Si vous voulez savoir comment cela fonctionne [commencez ici] (http://msdn.microsoft.com/en-us/library/vstudio/ms752914 (v = vs.110) .aspx) et continuez à lire. – Will