Обновление показанного поля в комбинированном окне DisplayMemberPath не показано - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть комбобокс wpf.Его ItemsSource имеет привязку к ObservebaleCollection.Показанное значение (через DisplayMemberPath) является свойством Name класса Entity.Проблема в том, что когда я обновляю текущее имя выбранной сущности и запускаю NotifyPropertyChnage, он не обновляется в пользовательском интерфейсе (даже если я открываю комбинированный список, он там обновляется).Я предполагаю, что проблема в том, что хеш-код сущности остается тем же, и комбо не видит разницы.что я могу сделать?

xaml:

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

код:

    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"));
    }

1 Ответ

4 голосов
/ 01 февраля 2011

Очевидно, проблема в том, что комбинированный список вызывает ToString для объекта данных для отображения выбранного элемента и использует DisplayMemberPath для элементов в раскрывающемся списке.

Чтобы исправить это, используйте DataTemplate вместо DisplayMemberPath:

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

И назначьте его свойству ItemTemplate в выпадающем списке:

<ComboBox ItemsSource="{Binding Entities}"
          ItemTemplate="{StaticResource EntityTemplate}"
          SelectedItem="{Binding ...}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...