У нас есть настраиваемая коллекция объектов, которые мы привязываем к элементу управления списком. Когда элемент добавляется в список, он появляется в списке, однако, когда вы выбираете элемент, позиция валютного менеджера не переходит в позицию. Вместо этого позиция валютного менеджера остается на существующей позиции. Элемент списка выделяется, пока нажата мышь, однако см никогда не меняет положение.
Если я копирую один из объектов коллекции, список работает правильно.
Еще одно примечание: в коллекции также есть коллекции, не уверен, что это будет проблемой.





Коллекции не имеют понятия «текущий элемент». Возможно, в вашей собственной коллекции есть, но ListBox этого не использует. У него есть собственный индекс «текущего элемента» в коллекции. Вам необходимо обрабатывать события SelectedIndexChanged, чтобы поддерживать их синхронизацию.
Возможно, вам потребуется опубликовать код; следующее (с двумя списками, связанными вместе только CM) показывает, что он работает нормально ... поэтому, чтобы найти ошибку, нам может потребоваться некоторый код.
using System;
using System.ComponentModel;
using System.Windows.Forms;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
BindingList<Foo> foos = new BindingList<Foo>();
foos.Add(new Foo("abc"));
foos.Add(new Foo("def"));
ListBox lb1 = new ListBox(), lb2 = new ListBox();
lb1.DataSource = lb2.DataSource = foos;
lb1.DisplayMember = lb2.DisplayMember = "Bar";
lb1.Dock = DockStyle.Left;
lb2.Dock = DockStyle.Right;
Button b = new Button();
b.Text = "Add";
b.Dock = DockStyle.Top;
b.Click += delegate
{
foos.Add(new Foo("new item"));
};
Form form = new Form();
form.Controls.Add(lb1);
form.Controls.Add(lb2);
form.Controls.Add(b);
Application.Run(form);
}
}
class Foo
{
public Foo(string bar) {this.Bar = bar;}
private string bar;
public string Bar {
get {return bar;}
set {bar = value;}
}
}
Я нашел проблему, потратив слишком много времени ....
Эта проблема была связана с одним из свойств элемента (настраиваемого класса) в коллекции, который был привязан к элементу управления выбора даты. Конструктор класса никогда не устанавливает значение по умолчанию.
Это вызвало проблему с диспетчером валют, не позволяющим изменить позицию, поскольку конкретное свойство (привязанное к средству выбора даты) было недействительным.
Мне плохо! Я лучше знаю!
Настраиваемая коллекция настраиваемых классов реализует Ilist.