Поведение BindingList и ListBox - PullRequest
1 голос
/ 26 января 2011

У меня есть ListBox, который связан с коллекцией BindingList.Это прекрасно работает.

Мое единственное горе происходит, когда первый предмет входит в коллекцию.Поведение ListBox по умолчанию заключается в выборе этого элемента, но это не вызывает событие SelectedIndexChanged.Я предполагаю, что это потому, что SelectedIndex изначально установлен в нуль;когда он становится ничем, кроме нуля, индекс фактически не изменяется;скорее назначен.Как я могу остановить поведение по умолчанию при выборе (выделении) первого начального элемента, добавленного в ListBox?

Если мое предположение неверно, пролите немного света?

Обновление

Здесь представлены основные части моего кода.

    public UavControlForm()
    {
        InitializeComponent();
        _controlFacade = new UavController.Facade.ControlFacade();
        UpdateFlightUavListBox();
    }

    private void UpdateFlightUavListBox()
    {
        lsbFlightUavs.DataSource = _controlFacade.GetFlightUavTally();
        lsbFlightUavs.DisplayMember = "Name";
    }

    private static BindingList<FlightUav> _flightUavTally = new BindingList<FlightUav>();
    public BindingList<FlightUav> FlightUavTally
    {
        get { return _flightUavTally; }
    }

    public void AddFlightUav(double[] latLonAndAlt)
    {
        FlightUav flightUav = new FlightUav();
        flightUav.Latitude = latLonAndAlt[0];
        flightUav.Longitude = latLonAndAlt[1];
        flightUav.Altitude = latLonAndAlt[2];
        _flightUavTally.Add(flightUav);

        UtilStk.InjectAircraftIntoStk(flightUav.Name);
        flightUav.SetFlightDefaults();
        PlayScenario();
    }

Обновление:

Итак, установка lsbFlightUavs.SelectedIndex = -1 решает проблему,Вышеуказанный метод AddFlightUav() вызывается из обработчика OnClick кнопки во второй форме из основной формы.Как я могу вызвать lsbFlightUavs.SelectedIndex = -1 из этой второй формы, когда возвращается метод AddFlightUav()?Я знаю, что могу сделать ListBox статичным, но мне кажется, что это плохая практика ... что может быть более элегантным решением?

1 Ответ

0 голосов
/ 28 января 2011

Используя WinForms, я реализовал шаблон Singleton. Это позволило мне получить доступ к элементу управления ListBox из моей второй формы.

Форма 1

private static UavControlForm _instance = new UavControlForm();
private UavControlForm()
{
    InitializeComponent();   
}
public static UavControlForm Instance
{
    get { return _instance; }
}
public ListBox FlightUavListBox
{
    get { return lsbFlightUavs; }
}

Форма 2

UavControlForm.Instance.FlightUavListBox.SelectedIndex = -1;
...