2010-11-08 5 views
0

J'ai ceci:Problème de liaison de contrôle utilisateur WPF?

public MyView: UserControl 
{ 
    public IList<Person> PersonList { get; set; } 

    public MyView() 
    { 
    //code 
    } 

    public void Display(MyData myData) 
    { 
    DataContext=myData; 
    } 
    //code 
} 

Le XAML pour cela comprend un ComboBox:

ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=PersonList}" 

Pour une raison quelconque, cela ne fonctionne pas et la zone de liste déroulante ne soit pas remplie (Toutefois, si j'utilise le code-behind et je dis comboBox.ItemsSource = PersonList puis la zone de liste déroulante a été remplie).

Des idées?

Cordialement, MadSeb

Répondre

0

Votre propriété est privé, et êtes-vous sûr que vous définissez le DataContext.

* EDIT *

Basé sur le changement que vous avez fait ci-dessus, vous configurez votre datacontext correctement. Votre "PersonList" est un IList<> sur votre classe MyView, mais vous définissez votre contexte de données à autre chose.

Essayez d'ajouter des éléments à PersonList dans MyView et le réglage this.DataContext = this; Aussi, comme suggéré, passez votre IList<> à un ObservableCollection<>.

Je vous suggère également de lire l'approche Model View ViewModel (MVVM). Cela aidera beaucoup. Josh Smith a beaucoup de bons articles sur l'approche MVVM (et a écrit un bon livre à ce sujet aussi). Voici un lien vers son blog. Son livre y est également lié.

+0

J'ai essayé de faire la propriété publique et aucun résultat. Et je suis sûr que je mets le DataContext. Je viens de faire un changement à mon poste initial pour clarifier. – MadSeb

0

Je suppose que c'est parce que vous ne déclenchez aucun événement modifié par la propriété. Si vous ne notifiez pas votre interface utilisateur lorsque la valeur de la propriété est définie pour la première fois, la liaison ne sera pas mise à jour. Regardez dans l'interface INotifyPropertyChanged et implémentez-le dans votre classe.

De même, si votre propriété est IList pas un ObservableCollection ou ne met pas en œuvre INotifyCollectionChanged, lorsque vous ajoutez des éléments à la liste la databound interface utilisateur ne sera pas tenir compte.

+0

curieusement je construis l'IList en tant que ObservableCollection – MadSeb

0

Je crois que votre déclaration de liaison est le problème.
"{Reliant RelativeSource = {Ressource Relative}, Path = PersonList}" recherche une "PersonList" sur la liste déroulante elle-même.

Voyez-vous des erreurs de liaison dans la fenêtre de sortie?

Idéalement, vous voudriez lier à une propriété dans votre DataContext (MyData)