Настройка ListBox.SelectedItem с помощью пользовательского сравнения - PullRequest
0 голосов
/ 07 июня 2018

Я создал класс, который реализует IComparable<>.Примерно так.

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 элемент управления этими объектами.

Я ожидал, что тогда смогу сделать что-то вроде следующего.Но это, похоже, не имеет никакого эффекта (и исключение не выбрасывается).

Entry entry = new Entry("...");
MyListBox.SelectedItem = entry;

Я подумал, что будет использовать мой собственный код сравнения, чтобы найти соответствующий элемент.Но если я установлю точку останова в Entry.CompareTo(), она никогда не будет достигнута.

При поиске в Интернете информация о настройке свойства SelectedItem кажется довольно слабой.Может кто-нибудь объяснить, что здесь происходит.

1 Ответ

0 голосов
/ 07 июня 2018

Попробуйте вместо этого реализовать интерфейс IEquatable.Поскольку вам, видимо, нет дела до сравнения объектов , вы можете просто вернуть результат результата String.Equals в поле данных (которое, вероятно, должно быть свойством).

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();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...