Greetings, en créant ma première application WPF basée sur MVVM et en essayant de comprendre pourquoi je ne peux pas me connecter à l'événement PropertyChanged d'une propriété de dépendance.Impossible de se connecter à l'événement PropertyChanged à l'aide de MVVM-Light
code dans le modèle de vue parent:
void createClients()
{
var clients = from client in Repository.GetClients()
select new ClientViewModel(Repository, client);
foreach (var client in clients)
{
client.PropertyChanged += onClientPropertyChanged;
}
Clients = new ViewableCollection<ClientViewModel>(clients);
Clients.CollectionChanged += onClientsCollectionChanged;
}
// Never gets called
void onClientPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Name")
{
//...
}
}
ViewableCollection est une simple extension de ObservableCollection pour encapsuler une vue.
Dans les ClientViewModel
, les setters sont appelés, mais RaisePropertyChanged ne fonctionne pas comme prévu, car onClientPropertyChanged
n'est pas appelé. Les deux modèles de vue héritent de ViewModelBase
.
public string Name
{
get { return client.Name; }
set
{
if (value == client.Name) return;
client.Name = value;
RaisePropertyChanged("Name");
}
}
Si câbler jusqu'à PropertyChanged
à une méthode dans la ClientViewModel
il est tiré, donc je suis perplexe pourquoi cela ne fonctionne pas dans le modèle de vue parent. Où vais-je mal?
Comment déclenchez-vous la modification de la propriété Nom? Si c'est par liaison de données, utilisez-vous le mode TwoWay? Vérifiez la fenêtre de sortie pour les erreurs de liaison de données. En outre, avez-vous essayé de placer un point d'arrêt dans votre setter de propriété Name et est-il en train d'être frappé? –
Salut Matt, oui sur les deux points, mais je viens de trouver une autre question SO qui explique ce comportement. – si618