首页 文章

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

提问于
浏览
3

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

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

    显然,问题是组合框调用数据对象上的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 ...}"/>
    

相关问题