首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用自定义比较设置ListBox.SelectedItem

使用自定义比较设置ListBox.SelectedItem
EN

Stack Overflow用户
提问于 2018-06-07 05:07:00
回答 1查看 37关注 0票数 1

我创建了一个实现IComparable<>的类。就像这样。

代码语言:javascript
复制
public class Entry : IComparable<Entry>
{
    private string Data;

    public Entry(string data)
    {
        Data = data;
    }

    // Implementation...

    public int CompareTo(Entry entry)
    {
        return Data.CompareTo(entry.Data);
    }
}

然后我用这些对象填充一个ListBox控件。

我的期望是,我可以做如下所示的事情。但是这似乎没有效果(并且没有抛出异常)。

代码语言:javascript
复制
Entry entry = new Entry("...");
MyListBox.SelectedItem = entry;

我以为它会使用我的自定义比较代码来查找匹配的项目。但是如果我在Entry.CompareTo()中设置了一个断点,它永远不会被命中。

在web上搜索,有关设置SelectedItem属性的信息似乎很少。有人能解释一下这里发生了什么吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 06:19:09

请尝试实现IEquatable接口。因为您显然不关心对象比较,所以可以只在数据字段(可能应该是一个属性)上返回String.Equals结果。

代码语言:javascript
复制
public class Entry : IEquatable<Entry>  {
  private string Data = string.Empty;

  public Entry(string data) {
    Data = data;
  }

  public bool Equals(Entry other) {
    if (other == null) return false;
    return String.Equals(this.Data, other.Data);
  }

  public override bool Equals(object obj) {
    return Equals(obj as Entry);
  }

  public override int GetHashCode() {
    return this.Data.GetHashCode();
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档