更新组合框DisplayMemberPath中的显示字段(未显示)

ie1*_*ie1 4 .net wpf combobox

我有一个wpf组合框。它的ItemsSource已绑定到ObservebaleCollection。显示的值(通过DisplayMemberPath)是Entity类的Name属性。问题是,当我更新当前选定的实体名称并触发NotifyPropertyChnage时,它不会在UI中更新(即使当我打开组合列表时,它也会在那里更新)。我想问题是实体哈希码仍然相同,并且组合看不到差异。我能做什么?

xaml:

<ComboBox     ItemsSource="{Binding Entities, Mode=OneWay}" 
          SelectedItem="{Binding CurrentEntity}"
          DisplayMemberPath="Name"/>
Run Code Online (Sandbox Code Playgroud)

码:

    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"));
    }
Run Code Online (Sandbox Code Playgroud)

Pav*_*kov 6

显然,问题在于组合框在数据对象上调用ToString以显示所选项目,并在下拉菜单中使用DisplayMemberPath作为项目。

要解决此问题,请使用DataTemplate代替DisplayMemberPath:

<DataTemplate x:Key="EntityTemplate"
              DataType="{x:Type my:Entity}">
    <TextBlock Text="{Binding Name}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

并将其分配给组合框的ItemTemplate属性:

<ComboBox ItemsSource="{Binding Entities}"
          ItemTemplate="{StaticResource EntityTemplate}"
          SelectedItem="{Binding ...}"/>
Run Code Online (Sandbox Code Playgroud)