2011-02-01 4 views
1

J'ai une zone de liste déroulante wpf. ItsSourceSource a une liaison à un ObservebaleCollection. La valeur affichée (via DisplayMemberPath) est la propriété Name de la classe Entity. Le problème est que lorsque je mets à jour le nom d'entité sélectionné et déclenche NotifyPropertyChnage, il n'est pas mis à jour dans l'interface utilisateur (même si j'ouvre la liste déroulante ici). Je suppose que le problème est que le hashcode de l'entité est toujours le même et que le combo ne voit pas de différence. Que puis-je faire?Mettre à jour le champ affiché dans la zone de liste déroulante DisplayMemberPath non affiché

XAML:

<ComboBox  ItemsSource="{Binding Entities, Mode=OneWay}" 
      SelectedItem="{Binding CurrentEntity}" 
      DisplayMemberPath="Name"/> 

Code:

public event PropertyChangedEventHandler PropertyChanged; 

    ObservableCollection<Entity> m_entities = new ObservableCollection<Entity>(); 

    public ObservableCollection<Entity> Entities{get{return m_entities;}} 

    public Entity CurrentEntity{get;set} 

    public void RenameEntity(string name) 
    { 
    m_currentEntity.Name = name; 
    PropertyChanged(this, new PropertyChangedEventArgs("CurrentEntity")); 
    PropertyChanged(this, new PropertyChangedEventArgs("Entities")); 
    } 
+0

tout d'abord, vous pouvez poster un code :) –

+0

Je J'ai eu le même problème. Je l'ai forcé à actualiser en effaçant et en réaffectant le DisplayMemberPath dans le code derrière juste après que le nom de l'élément (qui est pointé par DisplayMemberPath) a été modifié. Je sais que c'est une solution stupide, mais c'est la plus facile je pense. –

Répondre

3

Apparemment, le problème est qu'un combobox appelle ToString sur l'objet de données pour afficher l'élément sélectionné et utilise DisplayMemberPath pour les éléments du goutte à vers le bas.

Pour résoudre ce problème, utilisez un DataTemplate au lieu de DisplayMemberPath:

<DataTemplate x:Key="EntityTemplate" 
       DataType="{x:Type my:Entity}"> 
    <TextBlock Text="{Binding Name}"/> 
</DataTemplate> 

et l'affecter à la propriété de combobox ItemTemplate:

<ComboBox ItemsSource="{Binding Entities}" 
      ItemTemplate="{StaticResource EntityTemplate}" 
      SelectedItem="{Binding ...}"/> 
+0

Vous avez le même effet, la liste est mise à jour mais l'élément sélectionné actuellement mis à jour dans l'entité est toujours affiché comme auparavant – ie1

+0

Est-ce que vous déclenchez l'événement PropertyChanged pour la propriété Name dans votre entité? –

+0

Essayez d'augmenter NotifyPropertyChange pour Entity.Name, mais n'a pas aidé – ie1