2010-10-23 2 views
1

J'ai un contrôle utilisateur personnalisé qui expose un DepenencyProperty (ImageData).Comment se lier à la propriété de dépendance

J'ai placé ce contrôle utilisateur sur une page et je lie sa propriété ImageData à une propriété de ViewModel de ma page (photo).

<localControls:PhotoPicker ImageData="{Binding Path=Photo, Mode=TwoWay}"/> 

Lorsque l'utilisateur interagit avec le contrôle le réglage des commandes propriété ImageData la propriété Photo de mon viewmodel est mis à jour == Parfait. Toutefois, si ViewModel modifie la valeur de Photo, la propriété ImageData de PhotoPicker n'est pas modifiée. Que pourrais-je manquer pour ramener les données du ViewModel au contrôle de l'utilisateur?

MISE À JOUR: Suite à une enquête plus approfondie, il semble que le paramètre de ViewModel retour au contrôle via la liaison, à travers la propriété dependencyproperty ne déclenche pas le setter de la propriété wrapper de propriété de dépendance. Quel bordel. J'ai besoin de savoir quand cela arrive, si je ne peux pas le faire dans le setter de la propriété wrapper, où devrais-je le faire?

MISE À JOUR 2: Il semble que la seule façon de trouver des modifications à DependencyProperty consiste à ajouter un PropertyChangedCallback dans PropertyMetadata lors de l'enregistrement de la propriété.

Répondre

1

Semble comme votre modèle de vue n'envoie pas les notifications modifiées de propriété? Extrêmement simplifié, votre modèle de vue doit ressembler à ceci:

public class MyViewModel : INotifyPropertyChanged 
{ 
    private object photo; 

    public object Photo 
    { 
     get { return this.photo; } 
     set { this.photo = value; this.OnPropertyChanged("Photo"); } 
    } 

    // ... 
} 
Questions connexes