#c# #.net #winforms
Вопрос:
У нас есть пользовательская коллекция объектов, которые мы привязываем к элементу управления списком. Когда элемент добавляется в список, он появляется в поле списка, однако при выборе элемента позиция валютного менеджера не переходит в позицию. Вместо этого должность валютного менеджера остается на существующей должности. Элемент списка горит ярко, пока нажата мышь, однако cm никогда не меняет положение.
Если я скопирую один из объектов коллекции, список будет работать правильно.
Еще одно примечание: в коллекции также есть коллекции, не уверен, что это будет проблемой.
Комментарии:
1. Пользовательская коллекция пользовательских классов реализует Ilist.
Ответ №1:
Я нашел проблему, потратив слишком много времени….
Эта проблема была связана с одним из свойств элемента(пользовательского класса) в коллекции, который был привязан к элементу управления средства выбора даты. Конструктор для класса никогда не устанавливает значение по умолчанию.
Это вызвало проблему с менеджером валют, не позволяющую изменять позицию, поскольку конкретное свойство (привязанное к средству выбора даты) было недействительным.
Мне плохо! Я знаю лучше!
Ответ №2:
Возможно, вам придется опубликовать какой-то код; следующее (с двумя списками, связанными вместе только 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;}
}
}
Ответ №3:
В коллекциях нет понятия «текущий товар». Возможно, это делает ваша пользовательская коллекция, но ListBox
она не использует это. У него есть свой собственный индекс «текущего элемента» в коллекции. Вам нужно обрабатывать SelectedIndexChanged
события, чтобы они были синхронизированы.